2010-12-19 20 views
4

MyItemBeanというオブジェクトがあり、0以上の関連するKeywordBeanオブジェクトを持つことができます。結果のクラスは次のようになります。私は彼らに対して検索クエリを実行できるようにHibernateの検索と関係

@Entity 
public class MyItemBean { 

    ...stuff... 

    @ManyToMany(targetEntity = KeywordBean.class, cascade = CascadeType.PERSIST) 
    @JoinTable(name = "tbl_item_keyword", joinColumns = @JoinColumn(name = "item_id"), inverseJoinColumns = @JoinColumn(name = "keyword_id")) 
    private List<KeywordBean> keywords = null; 

    ...more stuff... 
} 

@Entity 
public class KeywordBean { 

    ...stuff... 

    private String value=null; 

    ...more stuff... 
} 

私はインデックスにこれらのオブジェクトをJBossのシーム/ Hibernateの検索を使用しています。指定したキーワードの値を持つMyItemBean個のインスタンスを検索することができます。しかし、KeywordBeanオブジェクトをMyItemBean以上に適用するため、この関係は単方向です。リレーションをインデックスする方法の例については、Hibernate Searchのドキュメントを見てきましたが、それらが提供するすべての例は双方向です。 MyItemBean.keywordsに適用する必要がある注釈をキーワード値に正しくインデックス付けするために、どのような注釈を教えてもらえますか?

+0

「* Bean」は、特にBeanではありません。むしろ値オブジェクト( '* VO')です。 – alexander

答えて

6

注釈は、IndexedEmbeddedです。単方向の関連付けでもうまく動作します。 KeywordBeanの値を変更すると問題が発生する Hibernate Searchは、MyItemBeanインスタンスのインデックスを更新して、KeywordBeanを参照するインスタンスを更新する方法がありません。双方向関係では、@ ContaintainInを使用してこの問題を修正できますが、実際にはこれは必要ありません。あなたのユースケースでは、このインデックス更新の制約は問題ではないかもしれません。 KeywordBeanが変更されていない可能性があります。または、変更された場合は、手動で影響を受けるすべての* KeywordBean *を再索引付けできます。

- ハードディ

+0

@IndexEmbedded注釈はどこにありますか?それはクラスレベルでKeywordBeanに行きますか?またはキーワードのプロパティレベルのMyItemBean? – Shadowman

+0

MyItemBeanのキーワードプロパティに属しています – Hardy