[JPA] 기본 키 생성 전략 (1) : 직접 생성 방식 , 식별 컬럼 방식

해니·2023년 6월 18일
0

JPA

목록 보기
4/8
post-thumbnail



@Id

  • 데이터베이스 테이블의 기본 키(PK)와 객체의 필드를 매핑시켜주는 어노테이션
  • @Id만 사용할 경우 기본 키를 직접 할당해야 한다.
  • 기본키로 지정하고 싶은 변수에 @Id 어노테이션을 선언하면 해당 컬럼이 기본키로 지정된다.
  • 보통 생성 시점에 기본키 값을 전달한다.
@Entity
@Table(name = "hotel_info")
public class Hotel {

    @Id
    @Column(name="hotel_id")
    private String id;
    
    ...
 
 }
    
   public static void main(String[] args) {

        EMF.init();

        // 저장하기 전에 생성자 할당 , 보통 생성 시점에 전달함.
        Hotel entity = new Hotel("H-01" ,"말" ,2022 , Grade.S5);
     
        save(entity);
     
     	...
        
     }




@GeneratedValue

  • 기본 키를 자동 생성해주는 어노테이션
  • 속성으로는 strategy가 있는데, 이를 통해 자동 생성 전략을 지정해 줄 수 있다.
  • 기본키 자동 생성 전략은 4 가지가 있으며 전략속성을 생략하면 AUTO 속성으로 지정된다.



기본키 자동 생성 전략


AUTO

  • @GeneratedValue(strategy = GenerationType.AUTO)

  • dialect 값에 따라서 기본키 자동 생성 전략이 지정된다.
    ex) mysql : auto_increment, oracle : sequence ...


IDENTITY

  • @GeneratedValue(strategy = GenerationType.IDENTITY)
  • 기본 키 생성을 데이터베이스에 위임하는 전략
  • 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용하며, AUTO_INCREMENT를 이용해 기본키를 생성한다.
  • 데이터베이스에 값을 저장하고 나서야 (INSERT 쿼리 실행해야) 기본키 값을 알 수 있다.

            tx.begin();

            // 시퀀스 사용 방식
            // 생성 시점에 식별자를 지정하지 않음
            ActivityLog log = new ActivityLog("U01" ,"VISIT");
            logger.info("persist 실행 전");
            // persist() 시점에 시퀀스로 식별자 구함
            em.persist(log);
            logger.info("persist 실행 함.");
            logger.info("생성한 식별자: {}" ,log.getId());
            logger.info("커밋하기 전.");
            // 커밋 시점에 INSERT 쿼리 실행
            tx.commit();
            logger.info("커밋함.");







출처
[JPA] 기본 키(Primary Key)매핑 - @Id, @GeneratedValue JPA & Hibernate
https://ttl-blog.tistory.com/123#%40SequenceGenerator%20%EC%86%8D%EC%84%B1-1
[JPA] 기본키 자동 생성 전략(Primary Key)
https://bamdule.tistory.com/243

profile
💻 ⚾️ 🐻

0개의 댓글