엔티티 매핑
- 객체와 테이블 매핑 : @Entity, @Table
- 필드와 컬럼 매핑 : @Column
- 기본 키 매핑 : @Id
- 연관관계 매핑 : @ManyToOne, @JoinColumn
이어서 기본키 매핑과 연관관계 매핑 정리를 해보자
@Entity
public class Member {
@Id
private String id;
@Column(name="name", unique=false)
private String username;
..
}
3. 기본 키 매핑 (@Id, @GeneratedValue)
3-1. @Id
: 직접 할당
3-2. @GeneratedValue
: 자동 생성
* id 값을 넣으면 안됨
3-2-1. @GeneratedValue 속성
- IDENTITY : 기본 키 생성을 DB에 위임
- @GeneratedValue(strategy = GeneratedValue.IDENTITY)
- mysql 이면 auto_increment (*아래 사진 참고)
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GeneratedValue.IDENTITY)
private String id;
@Column(name="name", unique=false)
private String username;
..
}
- IDENTITY의 특징
영속성 컨텍스트에 값이 들어가려면 pk가 있어야하는데 IDENTITY 는 DB에 넣어봐야 pk 값을 알 수 있다.
그래서 IDENTITY 전략에서만 em.persist()로 영속성 상태를 만드는 시점에 바로 DB에 INSERT SQL 쿼리를 실행하여 DB에 식별자를 조회한다.
( JPA의 장점인 커밋 시점에 INSERT 쿼리를 모아서 DB에 날리지만 IDENTITY 전략에서는 예외)
- SEQUENCE : SEQUENCE 객체는 DB가 관리. (주로 오라클 DB에서 씀)
- @GeneratedValue(strategy = GeneratedValue.SEQUENCE)
- SEQUENCE 객체를 통해 값(1,2,...)을 가져와 세팅을 한다
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GeneratedValue.SEQUENCE)
private Long id; // Integer보다 Long 이 더 큼
@Column(name="name", unique=false)
private String username;
..
}
- TABLE : 키 생성 전용 테이블을 만들어서 시퀀스 흉내내는 전략
- 모든 DB에 적용가능한 장점이 있다.
- 테이블을 직접 사용하니 성능이 떨어지는 단점이 있다.
- AUTO : 기본값이며 DB방언(오라클, MySQL)에 맞춰서 IDENTITY , SEQUENCE , TABLE 셋 중 하나로 자동생성된다.
- GenerationType.AUTO 생략해도 기본이 AUTO
반응형
LIST
'공부' 카테고리의 다른 글
객체 지향 프로그래밍과 다형성 (feat. 스프링) | SOLID (0) | 2023.11.06 |
---|---|
연관관계 | 단방향, 양방향, 연관관계의 주인 (0) | 2023.10.24 |
엔티티 매핑 (1) | @Entity, @Table, @Column, @Enumerated.. (0) | 2023.09.22 |
JPA (3) 영속성 컨텍스트 | 생명주기(영속,비영속,준영속),이점(1차캐시,더티체킹,동일성) (0) | 2023.09.21 |
JPA (2) | JPA 구동방식 설명 (0) | 2023.09.20 |