Suy*_*ash 5 java orm hibernate jpa-2.0
在检索具有双向多对多关系的实体的数据时,我遇到了问题。如果List用于存储实体,则无法同时获取多个包错误。如果我将代码更改为use Set,则会出现stackoverflow错误。
细节 :
用户有许多银行帐户;银行帐户可以有许多用户
User.java
@ManyToMany(fetch = FetchType.EAGER, mappedBy="user") 
private List<BankAccount> bankAccounts = new ArrayList<BankAccount>();
BankAccount.java
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_bankaccount", 
           joinColumns = @JoinColumn(name="bank_account_id"), 
           inverseJoinColumns = @JoinColumn(name = "user_id")
)
private List<User> user = new ArrayList<User>();
数据库表
Users
user_id PK
Bankaccount
bank_account_id PK
user_bankaccount
bank_account_id PK ( references bankaccount.bank_account_id )
user_id PK ( references user.user_id )
问题
getAllUsers使用JUnit测试用例获取所有用户数据()时,无法同时获取多个数据包错误。Set和HashSet而不是List和ArrayList,则会出现stackoverflow错误。请帮助我,让我知道代码是否错误或我正在使用的特定版本的libs的已知休眠问题。
我也遇到过类似的问题,根本原因是上面提到的Vjeetje的Lombok生成代码。我的代码使用@Data注释,该注释生成具有交叉依赖字段的hashCode和ToString方法,并且此结构导致Hibernate卡住。因此,应该注意避免这些无限循环调用,在我的情况下,我只是添加了排除参数,例如@EqualsAndHashCode(exclude =“ dependent_list”)和@ToString(exclude =“ dependent_list”)。它解决了堆栈溢出的问题。
您无法在两个列表上映射多对多关系,hibernate 将尝试为每个嵌套元素获取一个集合,即用户列表中的每个用户都有一个银行帐户列表,其中有一个用户列表...。将其想象为永无止境的递归。
| 归档时间: | 
 | 
| 查看次数: | 7775 次 | 
| 最近记录: |