【问题标题】:Hibernate Search and RelationsHibernate 搜索和关系
【发布时间】:2011-05-27 18:00:16
【问题描述】:

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

【问题讨论】:

  • 您的*Bean 并不是一个特别的 Bean。它是一个值对象 (*VO)。

标签: hibernate search lucene relation hibernate-search


【解决方案1】:

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

--哈迪

【讨论】:

  • 那么@IndexEmbedded注解去哪儿了?它会在类级别上使用 KeywordBean 吗?还是关键字属性级别的 MyItemBean?
  • 属于MyItemBean中的keyword属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多