우선 결론부터 말씀드리면,
@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