Hibernate - Composite Identifiers @EmbeddedId @IdClass With @GeneratedValue is impossible

이미지
요즘에, MSA 꽂혀서 이거저거 공부를 여전히 하고 있다. 그러다가 DDD 에 대해서 관심이 가게 되고, DDD 를 공부하다가 또한 JPA 에 꽂혀서 이거저거 건드리고 있다. 그러다가 좀 fucking 한 걸 발견해서 포스팅 해보려고 한다. DDD 에서는    Ubiquitous Language  라는 개념이 있다. 도메인 전문가와 개발자 간에 같이 공유하며, 해당 프로젝트에 참여하는 모든 사람 간에 공유되는 언어이다. 도메인 주도 설계 구현 이라는 책에서 적절한 예시를 주고 있다. 1. patient.setShotType(ShotTypes.TYPE_FLU); patient.setDoes(dose); patient.setNurse(nurse); 2. patient.giveFluShot(); 3. Vaccine vaccine = vaccines.standardAdultFluDose(); nurse.administerFluVaccine(patient, vaccine); 3가지 예시 중 어느 것이 유비쿼터스 언어를 잘 반영하고 있다고 할까? 유비쿼터스 언어에 대한 대략적인 감은 잡았을 것이라고 생각한다. 도메인 관점에서 어떻게 하면 유비쿼터스 언어를 반영하는 설계를 할 수 있을까? 라는 고민을 항상 한다. DDD start 라는 책에서는 엔티티와 밸류 오브젝트라는 개념을 다룬다. (두 개념에 대한 설명은 하지 않겠다.) 아래 링크 참조 http://getoutsidedoor.com/2018/08/06/ddd-entities-value-objects-aggregates/ 여기서, 밸류 오브젝트를 통한 식별자를 사용하는 개념이 나온다. 단순히, 어떤 엔티티를 설계할 때 단순히 식별자를 Long 혹은 String 으로 type 선언을 하게 되면, 유비쿼터스 언어를 잘 반영했다고 보기 어렵게 된다. 좀 더 도메인 관점에서 해당 도메인을 잘 나타내기 위해서는 단순히 식별자를 L...