엔티티 매핑 
  • 객체와 테이블 매핑 : @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;
    
    ..
}

 

auto_increment

 

  • 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

+ Recent posts