Hibernate搜索和关系

时间:2010-12-19 02:36:14

标签: hibernate search lucene relation hibernate-search

我有一个名为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上应用哪些注释来正确索引关键字值吗?

1 个答案:

答案 0 :(得分:6)

要使用的注释是 IndexedEmbedded 。它也适用于单向关联。如果要更改 KeywordBean的值,则可能会出现问题Hibernate Search无法更新引用已更改的 KeywordBean <的 MyItemBean 实例的索引/ em>的。在双向关系中,您可以使用 @ContainedIn 来解决此问题,但您并不需要这样做。在您的用例中提供此索引更新约束可能不是问题。也许你的 KeywordBean 没有改变。或者,如果它发生变化,您可以重新索引受手动影响的所有* KeywordBean *。

- 哈迪