2010-12-19 223 views
4

我有一個對象叫做MyItemBean,它可以有0個或多個關聯的KeywordBean對象。生成的類看起來是這樣的:休眠搜索和關係

@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 Seam的/ Hibernate Search的索引這些對象,所以我可以對他們進行搜索查詢。我希望能夠搜索具有給定關鍵字值的MyItemBean實例。然而,這種關係是單向的,因爲我將KeywordBean對象應用於不止MyItemBean。我在Hibernate Search文檔中查找了關於如何索引關係的示例,但他們提供的所有示例都是雙向的。任何人都可以告訴我,我需要在MyItemBean.keywords上應用哪些註釋才能正確地爲關鍵字值編制索引?

+0

你的'* Bean'不是特別的一個Bean。它是一個價值對象('* VO')。 – alexander 2015-03-11 14:58:32

回答

6

要使用的註釋是索引嵌入。它也適用於單向關聯。如果您要更改KeywordBean的值,則可能發生問題Hibernate Search無法更新引用KeywordBeanMyItemBean實例的索引。在雙向關係中,你可以使用@ContainedIn來解決這個問題,但你並不需要這個。在你的用例上提供這個索引更新約束可能不是問題。也許你的KeywordBean沒有改變。或者,如果它發生變化,您可以重新索引所有受到手動影響的* KeywordBean *。

- 哈迪

+0

那麼@IndexEmbedded註釋去哪裏?它會在類級別使用KeywordBean嗎?或者是屬性級MyItemBean的關鍵字? – Shadowman 2010-12-22 15:02:06

+0

它屬於MyItemBean中的關鍵字屬性 – Hardy 2010-12-30 11:23:33