Spring

springboot JPA Annotation 정리

Stater 2019. 11. 16. 09:00

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