【问题标题】:Bidirectional relationship in Hibernate searchHibernate 搜索中的双向关系
【发布时间】:2013-10-03 16:35:49
【问题描述】:
我正在使用 Hibernate Search 创建一个应用程序。我注意到所有示例都使用了双向关系。我阅读了以下内容:
当@IndexedEmbedded 指向一个实体时,关联必须是
定向的,另一侧必须注释@ContainedIn(如
见前面的例子)。如果没有,Hibernate Search 没有办法
当关联实体更新时更新根索引(在我们的
例如,一个地方索引文档必须在关联时更新
地址实例已更新)。
Hibernate Search chapter 4
如果我认为 JPA 是我的应用程序的一部分,这不是一件坏事吗?所有对象现在都应该在哪里使用/它们拥有什么,这是否正常?有没有这方面经验的人?
【问题讨论】:
标签:
java
hibernate
jpa
hibernate-search
【解决方案1】:
如果让您的对象“知道它们在哪里使用”是一件坏事,请特别针对您的问题发表意见:
您没有向业务逻辑层引入依赖;那确实很可疑,但事实并非如此。
在这种情况下,您正在使现有链接更加明确:这些实体在数据方面具有关系,实际上最好突出显示这种关系,以便任何检查实体 A 的人都会立即意识到与实体 B 的关系:这种关系否则会被隐藏但仍存在于物理层上,对于从事映射工作的人来说,最好记住这一点。
它没有任何性能缺陷,也没有架构上的缺陷,并且具有实际好处,即它可能对您的业务逻辑有用,无需维护额外的查询。
【解决方案2】:
如果我认为 JPA 是我的应用程序的一部分,这不是一件坏事吗?
所有对象现在应该在哪里使用它们/它们是什么,这是否正常?
有?有没有这方面经验的人?
一点也不坏。事实上,双向关联是很常见的,因为您通常需要根据用例在实体图中双向导航。另请注意,由于延迟加载,双向关联通常不是性能或内存问题。
也就是说,如果您真的不需要并且想要双向关联,您可以随意使用单向关联。但是,在这种情况下,您需要小心使用 @IndexedEmbedded,原因在 Hibernate Search 文档中有所描述。