EnumType.STRING : enum 타입 값 이름을 저장
@Entity // 매핑 대상 엔티티
@Table(name = "hotel_info") // 테이블 이름에 해당하는 테이블과 매핑
public class Hotel{
@Id // 식별자로 매핑
@Column(name = "hotel_id") // 해당 이름의 칼럼에 매핑
private String id;
@Column(name = "nm")
private String name;
private int year; // year 칼럼에 매핑
@Enumerated(EnumType.STRING) // 열거타입 이름을 값으로 저장
private Grade grade;
private LocalDateTime created;
@Column(name = "modified")
private LocalDateTime lastModified;
@Id
어노테이션을 필드에 붙이면 필드 접근@Id
어노테이션을 getter 메서드에 붙이면 프로퍼티 접근@Id
설정 대상에 직접 값 설정
Hotel hotel = new Hotel("H-001", ...);
entityManager.persist(hotel);
DB의 식별 칼럼에 매핑할 때 사용하는 방법
ex)
@GeneratedValue(strategy = GenerationType.IDENTITY)
설정
저장 시점에 시퀀스를 사용해서 식별자를 생성
@Id
@SequenceGenerator(
name = "log_seq_gen",
sequenceName = "activity_seq"
schema = "crm",
allocationSize = 1 // allocationSize를 1로 안 하면 여러 개의 시퀀스가 발생하는 문제 발생
)
@GeneratedValue(generator = "log_seq_gen")
// 생성 시점에 식별자 지정하지 않음
ActivityLog log = new ActivityLog("U01","VISIT");
// persist() 시점에 시퀀스로 식별자를 구함
em.persist(log);
// 커밋 시점에 INSERT 쿼리 실행
tx.commit();
저장 시점에 테이블 사용해서 식별자를 생성
@GeneratedValue(strategy = GenerationType.IDENTITY) 설정에 따라서 flush 시점이 달라집니다. 한번 이쪽 공부도 해보시는게 좋을거 같아요
jpa 전문가가 되기 위해 학습해 나가시는게 아주 멋집니다. querydsl도 깊게 학습해주세요!