본문 바로가기

Programming!

하나의 Entity에서 다중 Eager의 사용.

Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags


특정 버전 이상에서 해당 규격에 대한 검증을 시작한 듯 하다.


가령 Vendor라는 Entity가 있는데, onetomany로 두개의 자식 속성을 지정 후, 둘다 fetchtype을 eager로 지정하면 나는 오류다.

@Entity...

public class Vendor ...{

....

    @OneToMany(mappedBy = "vendor", cascade = CascadeType.ALL, fetch = FetchType.EAGER)

    private List<Employee> employees;


    @OneToMany(mappedBy = "vendor", cascade = CascadeType.ALL, fetch = FetchType.EAGER)

    private List<Customer> customers;

....

}



Hibernate가 이 경우 얼마나 sql 만들려면 힘들 겠냐..특히 두개 이상이 된다면 더..


그러니 Lazy 로 변경하자. 물론 몇가지 해결책은 있다.

@LazyCollection(LazyCollectionOption.FALSE)

또는

@IndexColumn(name = "id")

또는

@Fetch(FetchMode.SELECT)




그래도 성능적으로나 뭐로나 굳이 저런 어노테이션 남기는 것보다는 fetchType.LAZY를 써서 풀어주자.