JPA-DDD 3 (단방향vs양방향, 중복된 컬럼 객체 문제)
one to many 관계에서 단방향 vs 양방향
단방향의 문제점 ( / 양방향의 장점)
- 부모 insert -> 자식 insert ->
자식의 부모키를 update
??? - https://velog.io/@dpudpu/5
해결방법
- 부모측에서 nullable 을 설정해준다.
- 이렇게 해놓고 컴파일을 해보면 org.hibernate.MappingException 이 나올탠데
- (should be mapped with insert=”false” update=”false”) 라는 안내문구가나온다
- 자식쪽에는 insertable = false,updatable = false 를 셋팅해주면 컴파일이 된다
부모
1 |
|
자식
1 |
|
서비스란 ? - application service / domain service
application service | domain service | |
---|---|---|
주역할 | transaction관리 | 도메인에서 맡아야할 비지니스 로직 관리 |
권한범위 | 다양한 도메인/레파지토리에 역할을 배분 | 자신의 도메인 영역에서만 로직 수행 |
영향범위 | transaction종료시 다양한도메인에 영향 | 다른도메인에서는 값 만 받아 처리하므로 자신의도메인 |
Hibernate’s MultipleBagFetchException
nested @OneToMany에서 select를 한다면Hibernate’s MultipleBagFetchException - Hibernate cannot simultaneously fetch multiple bags
문제가 발생한다
에러메시지에서 나오는 bag 은 Hibernate에서 데이터를 가지고올때 사용하는 자료구조인 Bag이다.
market -> resource -> cars 에는 1:N 관계가 2번 중첩된다
이런경우 위와같은 에러가 발생하는데
단순히 List -> Set으로 변경해주면 해결이된다
순서가 걱정이라면 LinkedHashSet 으로 처리가능하다
중첩된 컬럼 객체 문제
nested @OneToMany에서 부모객체는 List
select를 해보면, list size 가 child 수만큼 있는 경우가 발생한다
단순히 자료형을 set
으로 바꿔주거나 , distinct를 넣어 해결한다.