让我说我有2个表(mysql) 表A: IDA,姓名,电话
表B: 美洲开发银行,DATA1,DATA2,IDA 表B中的:idA用作外键,它通过mysql workbench配置。
现在,我正在尝试使用Hibernate和jersy(构建某种其他API)
我正在使用netbeans作为我的IDE。
最后如果得到:
B.hbm.xml
<many-to-one name="a" class="DataTypes.A">
<column name="idA" length="45" not-null="true" />
</many-to-one>
...
和B.java
public class B implements java.io.Serializable {
private Integer idB;
private A a;
...
}
A.java
public class User implements java.io.Serializable {
private String idA;
private String
private Set<B> bs = new HashSet<B>(0);
....
}
和A.hbm.xml中的某些部分
<set name="bs" inverse="true">
<key>
<column name="idA" length="45" not-null="true" />
</key>
<one-to-many class="DataTypes.B" />
</set>
主要的问题是,当我使用hibernate获取表A的所有条目时,结果是所有A记录的hibernate查询,并且对于每个记录,它在获得其B(因为其外键)之后查找它的B(Set)它再看它的A等......
2个问题:): 这个递归有什么解决方案吗?或者我应该删除此循环引用? 是我的数据库模型还行吗? (外键)
感谢您的时间。
答案 0 :(得分:0)
您可以为这些关系指定延迟加载:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#performance-fetching-lazyproperties
答案 1 :(得分:0)
您可以按照以下方式配置b.hbm.xml;
<many-to-one name="a" class="DataTypes.A" fetch="select">
<column name="idA" length="45" not-null="true" />
</many-to-one>
和a.hbm.xml;
<set name="bs" inverse="true" lazy="true" fetch="select">
<key>
<column name="idA" length="45" not-null="true" />
</key>
<one-to-many class="DataTypes.B" />
</set>
现在应该可以使用