7

テーブルがマッピング テーブルを介して自己参照する @ManyToMany マッピングがあり、実際のマッピング テーブルの注文 ID で注文したいのですが、これを構成するのが難しいと感じています。

hibernate xml で実行できるため、JPA アノテーションにサポートがあると想定するのが自然です。マッピングテーブルの値を注文する方法を知っている人はいますか?

表は次のとおりです。

wap_site_components

intid
strname
intcomponentdef
dtmcreated      
intcustomer 

自己参照するマッピング テーブルは次のとおりです。

wap_site_component_relations

intid     
intparent (references intid in wap_site_components)
intchild  (references intid in wap_site_components)
intorder (this is the value we want to order the collection on)

Hibernate Annotations には次のものがあります。

@ManyToMany (fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable (name = "wap_site_component_relations", 
    joinColumns = {@JoinColumn (name = "intparent", referencedColumnName = "id") }, 
    inverseJoinColumns = {@JoinColumn (name = "intchild", referencedColumnName = "id") })
public Set<WapComponent> getChildren() {
    return children;
}

これは、hibernate xml で実行した方法です。

        <set
          name="children"
          table="wap_site_component_relations"
          lazy="true"
          cascade="none"
          sort="unsorted"
          order-by="intorder"
          mutable="false"
        >
          <cache 
            usage="read-only" 
          />

          <key
            column="intparent"
          >
          </key>

          <many-to-many
            class="se.plusfoursix.im46.data.wap.WapComponent"
            column="intchild"
            outer-join="auto"
           />

       </set>

したがって、@OrderBy タグを使用したいのですが、マッピング テーブルで inorder 値を参照できません。何か案は?ありがとう。

(コードで children コレクションに対して @OrderBy(intorder) を試しましたが、うまくいきませんでした)

4

3 に答える 3

2

リンク テーブルを表す注釈付きオブジェクトを作成し、@oneToMany を使用して、親から子リンクに、次に子にマップすることができます。

@Entity
public class Parent {
   @id
   Long id;

   @OneToMany(targetEntity = ChildLink.class) 
   Set<ChildLink> childLinks;
}

public class ChildLink {

    @Id
    @OrderBy
    Long orderBy;

    @ManyToOne
    Set<Parent> parents;

    @ManyToOne
    Set<Child> children;
}

大まかな例です。次に、おそらく親クラスの getChildren メソッドで、一連の childLinks から一連の子をプログラムで生成できます。

于 2009-05-14T14:11:06.297 に答える
0

結局、マッピング テーブルを Bean として作成するだけになりました。

誰かがそれなしで上記を実行する方法を持っている場合でも、あなたからの連絡をお待ちしています!

于 2009-05-15T13:26:11.123 に答える