Spring

Spring - JPA cannot simultaneously fetch multiple bags

codeManager 2022. 11. 4. 19:16
반응형
Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags

 

하나의 entity에 한개 이상의 FetchType.EAGER 를 사용할 때 발생합니다.

 

@Entity
public class Person {

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE)
    private List<Phone> phoneList;
    
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE)
    private List<Car> carList;

}

 

@OneToMany 속성을 EAGER로 여러개를 할 경우 MultipleBagFetchException이 발생합니다.

 

해결방법은

 

1. 

FetchType.LAZY로 바꾼다.

 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "person", cascade = CascadeType.REMOVE)
    private List<Car> carList;

 

2.

List를 Set으로 바꾼다.

 

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE)
    private Set<Car> carList;

 

3.

@Fetch(value = FetchMode.SUBSELECT)

 

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE)
    @Fetch(value = FetchMode.SUBSELECT)
    private List<Car> carList;
반응형