JPA - 앤티티 맵핑
객체와 테이블을 매핑
@Entity
- JPA가 관리할 클래스에 붙이는 어노테이션이다.
- 주의!
- 기본 생성자 필수 -> JPA는 리플랙션을 사용하여 동작하기 때문
- final 클래스, enum, interface, inner 클래스 사용 금지
- 저장할 필드에 final 사용 금지
- 주의!
@Table
- 앤티티와 매핑할 테이블을 지정한다.
- name : 앤티티의 이름을 지정한다. JPQL에서 사용될 이름이다. 기본값은 클래스 이름을 그대로 사용한다.
- catalog : catalog기능이 있는 DB에서 catalog를 매핑한다.
- schema : schema기능이 있는 DB에서 schema를 매핑한다.
- uniqueConstraints : DDL 생성시 유니크 제약 조건 생성 (설정파일의 DDL 옵션에 따라 동작한다.)
옵션 | 설명 |
---|---|
create | 기존 테이블 삭제 후 다시 생성 DROP -> CREATE |
create-drop | 종료 시점에 테이블 drop CREATE -> DROP |
update | 변경분만 반영(운영 DB 사용 금지) |
validate | 앤티티와 테이블이 정상 맵핑상태 확인 |
none | 사용하지 않음 |
DDL은 항상 신중하게 사용해야 한다.
위의 설명을 보면 알듯이 테이블을 DROP 하는 옵션이기 때문에
한번 실수하면 치명적이다.
로컬에서 확인한다고 DDL 옵션을 변경했는데 그것이 real 환경에 적용되어있다던가… 등등
필드와 컬럼 매핑
@Column
- 컬럼을 매핑하는 어노테이션
- name : 필드와 매핑할 테이블의 컬럼 이름 / default : 필드 이름
- insertable, updatable : 등록, 변경 가능 여부 / default : true
- nullable : null 허용 여부
- unique : 해당 컬럼에 유니크 제약조건을 생성할 때 쓰인다.
- columnDefinition : DB 컬럼정보를 직접 선언
- length : 문자 길이 제약 조건, String 타입에만 사용 / default : 255
- precision : BigDecimal, BigInteger에서 사용한다.
- scale : 소수의 자릿수 double,float 타입에는 적용되지 않는다.
@Enumerated
- 자바의 enum 타입을 매핑할 때 사용한다.
EnumType.ORDINAL 는 enum의 인덱스를 데이터베이스에 저장한다. 사용금지
EnumType.STRING 을 권장한다.
PK 매핑
@Id
- 앤티티에서 사용할 고유 Id를 지정하는 어노테이션
- PK와 매핑하는 게 일반적이긴 하나 꼭 PK일 필요는 없다. 해당 앤티티인지 식별 할 수 있는 고유한 값이기만 하면 된다.
- 추후 Spring Data Jpa와의 사용성을 생각한다면 Object type으로 선언하는 것을 권장한다. 기본 타입일 경우 null 체크에 이슈가 생긴다.
기본타입인 int로 선언된 id의 값이 0일 경우 이게 진짜 0이라서 그런 건지 기본타입이라 값이 없어 0인지 확인 할 수가 없다.
@GeneratedValue
- 값을 자동생성하는 어노테이션
- IDENTITY : DB에 위임
- IDENTITY로 설정 시 앤티티를 영속성컨텍스트에 저장 시 바로 insert쿼리가 나간다. (id 값을 가져와야 하기 때문)
- SEQUENCE : 시퀸스 오브젝트 사용
- Table : 키 생성용 테이블 사용
- AUTO : DB에 따라 자동 지정, 기본값이다.
댓글남기기