
엔티티와 매핑할 테이블을 지정한다.
package jpabook.start;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table (name="MEMBER")
public class Member {
@Id
@Column (name = "ID")
private String id;
@Column (name - "NAME")
private String username;
private Integer age;
//== 추가 ==
@Enumerated (EnumType. STRING)
private RoleType roleType; // 1
@Temporal (TemporalType. TIMESTAMP)
private Date createdDate; // 2
@Temporal (TemporalType. TIMESTAMP)
private Date lastModifiedDate; // 2
@Lob
private String description; //3
}
//Getter, Setter
package jpabook.start;
public enum RoleType {
ADMIN, USER
}
직접 할당하는 방법과 자동 생성하는 방법이 있다.
IDENTITY 전략의 경우 데이터를 데이터베이스에 INSERT한 후에 기본 키 값을 조회할 수 있다.
-> em.persist()를 호출하는 즉시 INSERT SQL이 데이터베이스에 전달
-> 트랜잭션을 지원하는 쓰기 지연 동작X
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Entity
@SequenceGenerator(
name = "BOARD_SEQ_GENERATOR".
sequenceName = ”BOARD_SEQ”, //매핑할 데이터베이스 시퀀스 이름
initialvalue = 1,
allocationsize = 1)
public class Board {
@IdQGeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "BOARD_SEQ_GENERATOR")
private Long id;
...
}
@Entity
@TableGenerator(
name = "BOARD_SEQ_GENERATOR",
table = ”MY_SEQUENCES",
pkColumnValue = ”BOARD_SEQ”,
allocationsize = 1)
public class Board {
@Id
@GeneratedValue(
strategy = GenerationType.TABLE,
generator = '' BOARD_SEQ_GENERATOR''
)
private Long id;
...
}
GenerationType.AUTO: 데이터베이스 방언에 따라 IDENTITY, SEQUENCE, TABLE 전략 중 하나를 자동으로 선택
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
none : 사용하지 않음
create : 기존 테이블 삭제 후 테이블 생성
create-drop : 기존 테이블 삭제 후 테이블 생성, 종료 시점에 테이블 삭제
update : 변경된 스키마 적용
validate : 엔티티와 테이블 정상 매핑 확인
운영 장비에서는 절대 crate, create-drop, update 사용하면 안된다.
개발 초기 단계는 create 또는 update
테스트 서버는 update 또는 validate
스테이징과 운영 서버는 validate 또는 none