JPA Entity 관련 Annotation
@Enumerate
Enumerate는 JPA에 사용 시 명확히 설정하지 않으면 예기치 못한 에러를 초래할 수 있다.
예를 들어 아래와 같이 Gender enum을 만들었다.
1 | public enum Gender { |
Entity에 Gender field를 추가하고 테스트 코드를 통해 확인해보자.
UserRepository 인터페이스에 @Query
를 통해 findRowRecord()라는 custom 쿼리를 작성하였으므로 참고하길 바란다.
1 |
|
1 |
|
그 결과 위와 같이 findAll()
을 해서 조회할 때는 gender=MALE로 입력이 돼었지만, gender의 값을 조회하면 0이라는 값이 나온다.
Enumerate의 EnumType
의 default 값은 ORDINAL
이다. zero-base로 값의 index를 설정한다.
위에서 MALE이 0번째로 설정되어 0이 출력된 것이다.
ORDINAL을 사용하면 추후에 Enum 내의 순서가 바뀌면 index값이 달라지게 되고 에러를 초래할 수 있다.
1 |
|
@Column
Field의 각 속성을 지정하는 Field-scope
의 Annotation이다.
과거에는 Column 이름을 모음을 제거하고 설정하는 경우가 많았다. Field name과 Column name을 분리하기 위해 사용된다.
nullable
속성도 자주 사용된다. DDL
을 호출할 때 not null column
을 만들기 위해 설정한다.
- 일반적인 조회 쿼리에서 validation을 하지 않는다.
Column이 단독적으로 unique
해야 한다면 @Column의 속성에 추가할 수 있다.
insertable
, updateable
속성은 DDL 외에 DML에도 영향을 받는다.
1 |
|
@Transient
Transient는 JPA의 Entity에서 DB의 column외의 추가 field
를 갖고 싶을 때 추가해준다.
아래와 같이 설정하면 쿼리문을 실행할 때 DB에 반영되지 않고, JPA에서만 사용된다.
1 |
|
JPA Entity 관련 Annotation
install_url
to use ShareThis. Please set it in _config.yml
.