0

Hibernate 3.1 を使用し、クラス M_devotee と M_member を持つ 2 つのマッピング ファイル m_devotee と m_member を持っています。m_member テーブルの Devotee_id 外部キーとして参照される m_devotee 列の献身者 ID から重複するエントリを避けたいと思います。

私は Hibernate を初めて使用し、マッピングにいくつかのタグが欠落しているかどうかを知りたいです。

ここに私のファイルがあります https://gist.github.com/2e2560e7a04a769848a4

とりあえず、dao ファイルにコードを追加して、重複を防ごうとしました。それは私に ClassCastException を与えます。また、トランザクションをロールバックし、サーブレットに false を返して、他の jsp ファイルに転送しないようにする必要があります。

Query qr1=session.createQuery("select m.devotee_id from M_member m");  
List<M_member> l1=qr1.list();  
for(M_member mi:l1)  
{  
 if(!(l1.contains(member.getDevotee_id())))  
 {  
  member.setDevotee_id(member.getDevotee_id());  
 //System.out.println("print devotee id"+member.getDevotee_id());  
 }  
}   

ここに示すように、M_devotee オブジェクトは M_member にキャストできません。

私は迷っており、どんな助けも大歓迎です!

4

2 に答える 2

2

あまり明確ではなく、関連について説明しているマニュアルの部分 (および命名規則について説明している Java マニュアルの部分も) を見逃しているように思えます。

しかし、確かなことは、devee_id フィールドにクエリを実行すると、次のようになるということです。

select m.devotee_id from M_member m

結果として得られるのは、信者 ID のリストです。M_member のリストではありません。したがって、dedeee_id が Long 型のフィールドであると仮定すると、得られるものはList<Long>. ではありませんList<M_member>

于 2012-07-18T20:26:02.207 に答える
1

M_member と M_devotee の間の関連付けを、Java セットとしてマップされた双方向の多対 1 関連付けとして設定します。このように、Set インターフェースは値がコレクションに 1 回だけ追加されることを保証するため、重複チェックは必要ありません。

<class name="Parent">
    <id name="id" column="parent_id"/>
    ....
    <set name="children" inverse="true">
        <key column="parent_id"/>
        <one-to-many class="Child"/>
    </set>
</class>

<class name="Child">
    <id name="id" column="child_id"/>
    ....
    <many-to-one name="parent" 
        class="Parent" 
        column="parent_id"
        not-null="true"/>
</class>

Hibernate のドキュメント 7.3.2 を参照してください。双方向の関連付け http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html#collections-bidirectional

于 2012-07-18T20:51:11.997 に答える