我正在使用Hibernate Search创建一个应用程序。我注意到所有的例子都使用了双向关系。我读了以下内容:
当@IndexedEmbedded指向实体时,关联必须是 方向性和另一方必须注释@ContainedIn(as 在前面的例子中看到)。如果没有,Hibernate Search无法使用 更新关联实体时更新根索引(在我们的版本中) 例如,一个Place索引文档必须在关联时更新 地址实例已更新)。
如果我考虑应用程序的JPA部分,这不是一件坏事吗?所有对象现在应该在何处使用/它们具有什么特征,这是正常的吗?是否有人对此有一些经验?
答案 0 :(得分:1)
如果我考虑应用程序的JPA部分,这不是一件坏事吗? 所有对象现在应该在何处使用/它们是什么,这是正常的 有?是否有人对此有一些经验?
根本不是坏事。实际上,您具有双向关联是很常见的,因为通常需要根据用例在实体图中导航两种方式。另请注意,由于延迟加载,具有双向关联通常不是性能或内存问题。
那就是说,如果你真的不需要并且想要双向关联,你可以自由使用单向关联。但是,在这种情况下,出于Hibernate Search文档中描述的原因,您需要小心使用 @IndexedEmbedded 。
答案 1 :(得分:1)
特别是对您的问题发表意见,如果让您的对象“知道他们在哪里使用”是一件坏事:
您没有向业务逻辑层引入依赖关系;这确实是可疑的,但事实并非如此。 在这种情况下,您使现有链接更加明确:这些是在数据术语中具有关系的实体,并且实际上更好地突出显示此关系,以便检查实体A的任何人将立即意识到与实体B的关系:这种关系否则会隐藏但仍然存在于物理层,对于从事映射工作的人来说,最好记住这一点。
它没有任何性能缺陷,模式没有缺点,并且具有实际的好处,它可能对您的业务逻辑有用,无需维护其他查询。