JPA-DDD 3 (단방향vs양방향, 중복된 컬럼 객체 문제)

one to many 관계에서 단방향 vs 양방향

단방향의 문제점 ( / 양방향의 장점)

해결방법

  • 부모측에서 nullable 을 설정해준다.
    • 이렇게 해놓고 컴파일을 해보면 org.hibernate.MappingException 이 나올탠데
    • (should be mapped with insert=”false” update=”false”) 라는 안내문구가나온다
  • 자식쪽에는 insertable = false,updatable = false 를 셋팅해주면 컴파일이 된다

부모

1
2
@JoinColumn(name = "car", nullable = false)
private List<Car> Cars;

자식

1
2
@JoinColumn(name = "resource_id",  insertable = false,updatable = false)
private List<Car> resourceId;

서비스란 ? - 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를 넣어 해결한다.

Comments