0

私が2つのテーブル(mysql)テーブルAを持っているとしましょう:idA、name、phone

テーブルB:idB、data1、data2、idA

表B:idAは外部キーとして使用され、mysqlワークベンチを介して構成されます。

今、私はjersyでHibernateを使用しようとしています(ある種のREST APIを構築しています)

IDEとしてnetbeansを使用しています。

最後に取得した場合:

  1. A.java
  2. B.java
  3. A.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;
     ...
}

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レコードの休止状態クエリであり、各レコードについて、B(外部キーのため)を取得した後、B(Set)を検索します。その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 に答える