t77*_*777 2 java hibernate hibernate-mapping
我有以下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
}
Run Code Online (Sandbox Code Playgroud)
启动应用程序,我得到以下异常:
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
Run Code Online (Sandbox Code Playgroud)
如果我删除一个仲裁OneToMany协会,或者如果我添加一个@Fetch(value = FetchMode.JOIN)仲裁OneToMany协会,一切正常.
这是一个hibernate错误,一个hibernate限制,还是我的实体有什么问题?TIA!
这不是一个bug.这是因为Hibernate使用一个带连接的select来获取所有数据.Hibernate可以连接三个或更多表,但是连接的结果将具有重复的Address列,例如列.Hibernate需要删除重复项 - 这是Set工作原因.
可能的解决方法:
Set<Address>而不是List<Address>.您应该Set用于所有集合.fetch = FetchType.LAZY@Fetch(value = FetchMode.SUBSELECT)一些额外的阅读:
对于集合启用了外连接提取的查询,Hibernate不会返回不同的结果(即使我使用distinct关键字)?
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |