작성
·
358
·
수정됨
0
안녕하세요.
실무에서 JPA 적용하여 프로젝트를 처음 진행하고 있습니다.
제가 몰랐던 부분을 강의를 듣다 알게 되어 문의 드립니다.
저는 DB Table에 해당하는 class를 만들고 @Entity 정의를 통해 매핑한다고 생각했는데
Table에 1:1 대응하는 class는 필요하겠지만 모든 class에 @Entity 정의를 할 필요는 없는것으로 이해했습니다.
많은 테이블이 밸류매핑으로 처리가 가능할 것 같아서요
(ex. User - UserDetail Table 같이 master-detail 관계 같은 경우.)
14번째 강의 예제인 user - membership_card 테이블의 경우도 @Entity 대신 @Embeddable를 사용해도 될 것 같고
user - best_pick Table 의 경우는 Entity 매핑을 하는 편이 어울릴 것으로 보여집니다.
1.위 내용처럼 실무에서 밸류매핑이 가능한 class의 경우 @Embeddable 어노테이션으로 정의하여 사용하는 경우가 많은 건가요?
2.관계에 따라 동일한 Table이 밸류 매핑 또는 엔티티 매핑으로 해야할 경우는 없는 걸까요?
(User Table에 대응하는 user class가 엔티티가 되고 UserDetail Table에 대응하는 userDetail class가 @Embeddable 가 될 경우
user - best_pick 관계에서 best_pick class에서 user class를 참조 할때 엔티티 매핑 외에 밸류 매핑을 할 수 있는 방법이 있을까요? 이미 user class는 엔티티인 상황인데 @Embeddable 정의를 통해 매핑을 다시 맺을 수 있는 것인지 헷갈리네요.. ㅜㅜ
정확한 이해를 위하여 문의 드렸습니다.
더불어 좋은 강의 감사합니다!! :)
답변 1
0
@Embeddable은 값(Value)를 표현하는 모델을 매핑할 때 주로 사용합니다.
실무에서 @Embeddable을 잘 활용할수록 모델이 풍부해지죠.
이 값 모델을 잘 활용한다는 것은 그 만큼 조직/개인의 모델 방식/역량하고도 연결이 됩니다.
그래서 조직/개인이 모델을 설계 결과물에 따라 사용하는 비율이 달라집니다.
동일한 테이블을 밸류로도, 엔티티로도 매핑한다는 것은
누군가에게는 엔티티인데, 누군가에는 밸류라는 얘기로 들립니다.
명령 모델과 조회 모델을 나눠서 구현하면 그럴 가능성이 있다고 생각합니다(CQRS).
명령 모델에서는 엔티티엔데, 조회 모델에서는 밸류라던가 하는 식으로요.