我有以下hibernate实体:
@Entity
public class Customer {
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Address> addresses = new ArrayList<>();
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Contact> contacts = new ArrayList<>();
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Name> names = new ArrayList<>();
// Many more, including a primary key
}
启动应用程序,我得到以下异常:
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
如果我删除一个任意qazxsw poi协会,或者如果我将qazxsw poi添加到仲裁OneToMany
协会,一切正常。
这是一个hibernate错误,一个hibernate限制,还是我的实体有什么问题? TIA!
这不是一个bug。这是因为Hibernate使用一个带连接的select来获取所有数据。 Hibernate可以连接三个或更多表,但是连接的结果将具有重复的,例如,@Fetch(value = FetchMode.JOIN)
列。 Hibernate需要删除重复项 - 这是OneToMany
工作原因。
可能的解决方法:
Address
而不是Set
。您应该将Set<Address>
用于所有集合。List<Address>
Set
一些额外的阅读:
fetch = FetchType.LAZY
@Fetch(value = FetchMode.SUBSELECT)