참고
객체와 테이블 매핑
NOTE
JPA를 사용하는데 가장 중요한 일은 Entity와 Table을 정확히 맵핑하는 것이다.
•
객체와 테이블 매핑 : @Entity, @Table
•
기본 키 매핑 : @Id
•
필드와 컬럼 매핑 : @Column
•
연관관계 매핑 : @ManyToOne, @JoinColumn
@Entity, @Table
NOTE
@Entity
JPA를 사용해서 Table과 맵핑할 클래스는 @Entity를 꼭 붙여야한다!
•
기본 생성자가 필수로 있어야 한다.
•
final 클래스, ENUM, interface, inner 클래스에는 사용할 수 없다.
•
저장할 필드에 final을 사용하면 안된다.
@Table
•
Entity와 맵핑할 Table을 지정한다.
•
생략하면 맵핑한 Entity이름을 테이블 이름으로 사용한다.
필드와 컬럼 매핑
@Enumerated
NOTE
@Enumerated (EnumType. STRING)
private RoleType roleType;
Java
복사
•
EnumType.ORDINAL
◦
enum에 정의된 순서대로 ADMIN은 0, USER는 1 값이 데이터베이스에 저장된다.
◦
주의 : 이미 저장된 enum의 순서를 변경할 수 없다
▪
만약 새로운 enum이 추가되면서, ADMIN이 1로 밀려도 데이터베이스는 0을 간직한다.
•
EnumType.STRING
◦
enum 이름 그대로 ADMIN은 ‘ADMIN’, USER는 ‘USER’라는 문자로 저장된다.
◦
장점 : 저장된 enum의 순서가 바뀌거나 추가되어도 안전하다
@Temporal
NOTE
@Temporal (TemporalType. TIMESTAMP)
private Date createdDate;
@Temporal (TemporalType. TIMESTAMP)
private Date lastModifiedDate;
public enum RoleType {
ADMIN, USER
}
Java
복사
•
날짜 타입(Date, Calendar)을 매핑할 떄 사용한다.
•
LocalDate(년월), LocalDateTime(년월일)을 사용할 때는 생략 가능
(최신 하이버네이트 지원)
@Temporal
NOTE
@Temporal (TemporalType. TIMESTAMP)
private Date createdDate;
@Temporal (TemporalType. TIMESTAMP)
private Date lastModifiedDate;
Java
복사
•
날짜 타입(Date, Calendar)을 매핑할 떄 사용한다.
•
LocalDate(년월), LocalDateTime(년월일)을 사용할 때는 생략 가능
(최신 하이버네이트 지원)
@Lob, @Transient
NOTE
@Lob
private String description;
Java
복사
•
데이터베이스 BLOB, CLOB 타입과 매핑
@Transient
private int tmp_number;
Java
복사
•
필드 매핑이 안되게 하는 어노테이션
@Column
NOTE
@Column (name = "ID")
private String id;
Java
복사
•
속성
◦
name : 필드와 매핑할 테이블 컬럼의 이름
◦
insertable, updatable : 등록, 변경 가능여부
◦
nullable : null 허용여부
◦
unique : 한 컬럼에 간단한 unique걸 떄 사용
▪
사용빈도가 낮고, 테이블에서 @Table(uniqueConstraint())를 사용하는 걸 권장
▪
이렇게 해야 유니크제약에 이름을 줄 수 있기 때문.
◦
columnDefinition : 컬럼 정보를 직접 줄 수 있다.
◦
length : 문자 타입 길이 제약조건
◦
precision, scale(DDL) : BigDecimial 타입에서 사용한다.