엔티티 매핑 소개
@Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라고 한다.
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수!
기본 생성자 필수(파라미터 없는 public, protected)
final, enum, interface, inner 클래스 사용 X
엔티티와 매핑할 테이블 지정
| 속성 | 기능 | 기본값 |
|---|---|---|
| name | 매핑할 테이블 이름 | 엔티티 이름을 사용 |
| catalog | 데이터베이스 catalog 매핑 | |
| schema | 데이터베이스 schema 매핑 | |
| uniqueConstraints(DDL) | DDL 생성 시에 유니크 제약조건 생성 |
hibernate.hbm2ddl.auto
| 옵션 | 설명 |
|---|---|
| create | 기본테이블 삭제 후 다시 생성(DROP + CREATE) |
| create-drop | create와 같으나 종료시점에 테이블 DROP |
| update | 변경분만 반명(운영DB에서는 사용하면 안됨) |
| validate | 엔티티와 테이블이 정상 매핑되었는지만 확인 |
| none | 사용하지 않음 |
운영 장비에는 create,create-drop,update 사용하지 말것
개발 초기 : create or update
테스트 서버 : update or validate
스테이징, 운영 : validate or none
@Entity
public class Member {
@Id
private Long id;
@Column(name = "name")
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
public Member() {}
}
| 속성 | 설명 | 기본값 |
|---|---|---|
| name | 필드와 매핑할 컬럼 이름 | 객체의 필드 이름 |
| insertable,updatable | 등록,변경 가능 여부 | TRUE |
| nullable(DDL) | null값의 허용 여부 설정. false시 DDL 생성시에 not null 제약조건 추가 | TRUE |
| unique(DDL) | 유니크 제약조건을 걸 떄 사용한다.(컬럼에선 잘 사용하지않음) | TRUE |
| columnDefinition(DDL) | 데이터베이스 컬럼 정보 직접 줄 때 사용 | 필드의 자바 타입과 방언 정보 사용 |
| length(DDL) | 문자 길이 제약조건,String 타입에만 사용 | 255 |
| precision,scale(DDL) | 아주 큰 숫자, 소수점 필요할때 사용 |
| 속성 | 설명 | 기본값 |
|---|---|---|
| value | - EnumType.STRING: enum 이름을 데이터베이스에 저장 - EnumType.ORDINAL: enum 순서를 데이터베이스에 저장 | EnumType.ORDINAL |