@Entity
, @Table
@Column
@Id
@ManyToOne
, @JoinColumn
@Entity
@Entity
가 붙은 클래스는 JPA가 관리하는 엔티티.
따라서 JPA를 사용해서 테이블로 매핑할 클래스는 @Entity
가 필수이다.
@Table
엔티티와 매핑할 테이블을 지정한다.
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.ddl-auto
create
: drop + create 기존 테이블 삭제 후 다시 생성create-drop
: create와 같으나 종료 시점에 테이블 dropupdate
: 변경문만 반영(추가만)validate
: 엔티티와 테이블이 정상 매핑되었는지만 확인none
: 사용하지 않음create
, create-drop
, update
를 사용하면 안된다.create
, update
update
또는 validate
validate
또는 none
DDL
생성 기능@Column(nullable=false, length=10)
@Id
: pk매핑@Column(name="")
: 컬럼매핑. 데이터베이스의 컬럼 이름 지정@Enumerated
: enum타입 매핑@Temporal(TemporalType.TIMESTAMP)
: 날짜 타입 매핑@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Lob
: 데이터베이스의 varchar를 넘어서는 컨텐츠를 넣고 싶을 때. BLOB, CLOB매핑@Transient
: 매핑 하고 싶지 않을 때@Column
name
: 필드와 매핑할 테이블의 컬럼 이름insertable, updatable
: 등록, 변경 가능 여부nullable
: null값의 허용 여부 설정. unique
: 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용. 그러나 이름을 반영하기 어려워서 @Table의 uniqueConstraints를 선호. columnDefinition
: 데이터베이스 컬럼 정보를 직접 줄 수 있다.length
: 문자 길이 제약 조건, String타입에서만 사용precision, scale
: BigDecimal 타입에서 사용. 아주 큰 수, 소수점 쓸 때@Enumerated
자바 enum타입을 매핑할 때 사용.
ORDINAL 사용 x (enum타입이 추가되었을 때 운영의 어려움)
EnumType.ORDINAL
: enum순서를 데이터베이스에 저장(integer) ---> 기본값EnumType.STRING
: enum이름을 데이터베이스에 저장@Temporal
날짜 타입을 매핑할 때 사용.
LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)
private LocalDateTime created;
TemporalType.DATE
: 날짜TemporalType.TIME
: 시간TemporalType.TIMESTAMP
: 날짜와 시간@Lob
데이터베이스 BLOB, CLOB타입과 매핑
@Lob
에는 지정할 수 있는 속성이 없다.
매핑하는 필드 타입이 문자이면 CLOB매핑, 나머지는 BLOB매핑
CLOB
: String, char[], java.sql.CLOBBLOB
: byte[], java.sql.BLOB@Transient
@Transient
private Integer temp;
@Id
@GeneratedValue
@Id
만 사용@GeneratedValue
)IDENTITY
: 데이터베이스에 위임. (MySQL)SEQUENCE
: 데이터베이스 시퀀스 오브젝트 사용 (Oracle)TABLE
: 키 생성 용 테이블 사용. 모든 DB에서 사용AUTO
: 방언에 따라 자동 지정IDENTITY
@GeneratedValue(strategy =GenerationType.IDENTITY)
SEQUENCE
@GeneratedValue(strategy =GenerationType.SEQUENCE)
TABLE
@GeneratedValue(strategy =GenerationType.TABLE)