본문 바로가기
SpringBoot/오류

@EmbeddedId @GeneratedValue 복합키 키자동증가 불가

by se0nghyun2 2023. 5. 16.

우선 결론부터 말씀드리면, 

@GeneratedValue와 @EmbeddedId는 같이 못 쓴다고 확인했습니다...

 


DDD를 공부하던 도중 엔티티의 식별자를 Long,String으로 보단 명확하게 알 수 있는 밸류 타입으로 사용하는 방식을 알려주었습니다. 하여 해당 방식을 적용하여 구현하였습니다.(아래 문제점 등장..)

 

 

기존)

public class Book {

    @GeneratedValue(strategy = GenerationType.IDENTITY) //기본키  생성을 데이터베이스에 위임(데이터베이스에 의존적), Entity 등록 시 DB에서 AUTO_INCREMENT하여 PK생성 후 INSERT
    @Column(name = "book_id")
    private Long bookId;

 

 

개선)

public class Book {

    //BookId로써 타입자체가 id가 내부도서번호 임을 알 수 있다.
    @EmbeddedId
    private BookId bookId;

..
}

@Embeddable
@Getter
@AllArgsConstructor
public class BookId implements Serializable {

    @GeneratedValue(strategy = GenerationType.IDENTITY) //기본키  생성을 데이터베이스에 위임(데이터베이스에 의존적), Entity 등록 시 DB에서 AUTO_INCREMENT하여 PK생성 후 INSERT
    @Column(name = "book_id")
    private Long bookId;

    protected BookId(){};

}

 

위처럼 구현 후 새로운 레코드를 삽입하려하였습니다.

 

그런데...???

아래와 같은 에러 발생하였습니다. @GeneratedValue가 정상적으로 작동하지 않습니다...

 

여러 블로그 및 문서를 확인해보니, @GeneratedValue와 @EmbeddedId는 같이 못 쓴다고 확인했습니다...

방법은 찾지 못했습니다..

 

 

해결)

명확한 해결도 아니다...

결국 키를 생성하여 집어넣는 식으로 방식을 바꿔야 할 거 같습니다 ㅠㅠㅠ

 


 

참고) 

https://infondgndg91.blogspot.com/2019/11/hibernate-composite-identifiers.html

https://www.inflearn.com/questions/256570/embeddedid-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8