Springboot JPA에 관련 되어서 개인적으로 Annotation을 정리
어노테이션 | 의미 |
@Entity | @Entity가 설정된 클래스를 엔티티라하며, 기본적으로 클래스 이름과 동일한 테이블과 매핑된다. |
@Table |
엔티티 이름과 매핑될 테이블 이름이다른경우, name속성을 사용하여 매핑한다. 엔티티 이름과 테이블 이름이 동일하면 생략해도 된다. |
@Id |
테이블의 기본 키를 매핑한다. 엔티티의 필수 어노테이션으로서 @Id가 없는 엔티티는 사용하지 못한다. |
@GeneratedValue |
@Id가 선언된 필드에 기본 키 값을 자동으로 할당한다. 다양한 옵션이 있지만 @GeneratedValue만 사용하면 설정된 데이터베이스에 따라서 JPA가 자동으로 결정해준다.(H2는 시퀀스를 이요하여 처리) |
테이블과 매핑되는 엔티티는 반드시 PK 칼럼과 매핑될 식별자 필드를 가져야하며,
@Id 어노테이션을 이용하여 매핑한다.
중요한점: JPA가 엔티티를 이용하여 등록 작업을 처리할 때, 식별자 필드에 값이 설정되지 않으면 예외가 발생한다.
반드시 유니한 값이 식별자 필드에는 설정되어야한다.
Table 어노테이션
속성 | 설명 |
name | 매핑될 테이블 이름을 지정한다. |
catalog | 데이터베이스 카탈로그를 지정한다. |
schema | 데이터베이스 스키마를 지정한다. |
uniqueConstraints | 결합 unique 제약조건을 지정하며, 여러개의 칼럼이 결합되어 유일성을 보장해야하는 경우 사용 |
Column 어노테이션
속성 | 설명 |
name | 칼럼 이름을 지정한다(생략시 프로퍼티명과 동일하게 매핑) |
unique | unique 제약조건을 추가한다(기본값:false) |
nullable | null 상태 허용여부를 설정한다.(기본값:false) |
insertable | INSERT를 생성할 때 이 칼럼을 포함할 것인지 결정한다(기본값:true) |
updatable | UPDATE를 생성할 때 이 칼럼을 포함할 것인지 결정한다.(기본값:true) |
columnDefinition | 이칼럼에 대한 DDL문서를 직접 기술한다. |
length | 문자열 타입의 길이를 지정한다(기본 값:255) |
precision | 숫자 타입의 전체 자릿수를 지정한다(기본값:0) |
scale | 숫자 타입의 소수점 자릿수를 지정한다(기본값:0) |
시간과 관련된 anotation
속성 | 설명 |
TemporalType.DATE | 날짜만 출력 |
TemporalType.TIME | 시간만 출력 |
TemporalType.TIMESTAMP | 날짜와 시간 모두 출력 |
@Temporal(TemporalType.DATE)
@Transient 어노테이션
엔티티 클래스 내의 특정 변수를 필드에서 제외할때 사용하는 어노테이션
@GeneratedValue
속성 | 설명 |
strategy | 자동 생성 전략을 선택한다.(GenerationType 지정) |
generator | 이미 생성된 키 생성기를 참조한다. |
PK설정을 위한 strategy 설정
PK 전략 | 해설 |
GenerationType.TABLE |
하이버네이트가 테이블을 사용하여 PK값을 생성한다. 따라서 PK 값 생성만을 위한 별도의 테이블이 필요하다. |
GenerationType.SEQUENCE |
시퀀스를 이용하여 PK 값을 생성한다. 이 방법은 시퀀스를 지원하는 데이터베이스에서만 지원한다. |
GenerationType.IDENTITY |
auto_increment나 IDENTITY를 이용하여 PK값을 생성한다. 일반적으로 MySQL 같은 데이터베이스를 이용할 때 사용한다. |
GenerationType.AUTO | 하이버네이트가 데이터베이스에 맞는 PK 값 생성 전략을 선택한다.(기본값으로 사용) |
'Spring' 카테고리의 다른 글
Springboot Thymeleaf 적용방법 (0) | 2019.11.18 |
---|---|
Springboot JPA 쿼리메소드 사용하기 (0) | 2019.11.17 |
Springboot 자동설정 및 의존성 관리 (0) | 2019.11.14 |
Lombok (0) | 2019.11.13 |
Springboot RestController 사용하기 (0) | 2019.11.11 |