0

hbm.xml ファイルに次のエンティティがあります

<class name="Base" table="base">
    <id name="id"/>
    <list name="ips" cascade="all-delete-orphan" lazy="false" fetch="join">
        <cache usage="read-write" include="all" />
        <key column="base_id" />
        <list-index column="ip_order"/>
        <element column="ip" type="string"/>
    </list>
</class>

コレクションに2つのips文字列を持つ1つのエンティティベースがあります。
私が作るとき:

session.createCriteria(base.class).list();

私が作るとき、結果は2つのベースオブジェクトです:

session.createQuery(" from Base").list();

結果は 1 つのエンティティ ベースです。
誰かが私がこのような状況にある理由を教えてもらえますか?

4

2 に答える 2

0

のテーブルには 2 つのレコードがあるに違いありませんips

ips熱心なフェッチを宣言しているためips、 fetch の基準を作成しているときにも fetch に参加Base.classし、「結果セット」に2つのレコードが含まれます。ただし、2 つの「レコード」は実際には同じインスタンスです。

解決方法は簡単ですが、DISTINCT_ROOT_ENTITY 結果トランスフォーマーの使用を検索してください。

于 2013-03-04T10:11:33.863 に答える
0

あなたのマッピングによると、xmlBaseは1つのテーブルであり、ips(IP)別のテーブルです。

2 つの List(ips) を持つ 1 つの BaseBaseは、テーブルに 1 つのエントリがあることを意味しますDB(base table)IPには 2 つのエントリがありますDB (ip table)

Obvisully ベース テーブルには 1 つのエントリしかありません。

この例を確認してください

于 2013-03-04T08:42:47.850 に答える