0

假设我有 2 个表(mysql)表 A:idA、姓名、电话

表 B:idB、data1、data2、idA

在表 B 中:idA 用作外键,它是通过 mysql 工作台配置的。

现在,我正在尝试将 Hibernate 与 jersy 一起使用(构建某种休息 API)

我正在使用 netbeans 作为我的 IDE。

最后如果得到:

  1. 爪哇
  2. B.java
  3. 一个.hbm.xml
  4. B.hbm.xml

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;
     ...
}

爪哇

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>

主要问题是当我使用休眠来获取表A的所有条目时,结果是对所有A记录的休眠查询,并且对于每条记录,它在获得它的B(因为它的外键)之后寻找它的B(设置)它的外观再次对于它的A等等..

2个问题:):这个递归有什么解决方案吗?还是我应该删掉这个循环引用?我的数据库模型可以吗?(外键)

感谢您的时间。

4

2 回答 2

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>

它现在应该可以工作了

于 2013-03-23T00:04:58.200 回答
0

您可以为这些关系指定延迟加载:http: //docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#performance-fetching-lazyproperties

于 2013-03-22T21:04:25.907 回答