繁体   English   中英

Hibernate中实体集合的陷阱

[英]pitfalls of collections of entities in Hibernate

OK,这是一个后续问题这一个 ,因为我现在真的混淆。

假设我在实体PersonEvent之间存在一对多或多对多关联,因此Java中的Person类包含Set<Event> (让我们忽略Event是包含单个Person还是Set<Person> 。)

Event s是存储在数据库中的实体,因此我可以更改事件字段。 什么是处理Event可变性且不会混淆Java Set <>身份检查的正确方法? 在这种情况下,您决不应该重写hashCode()和/或equals()吗? (例如,身份=基于对象引用身份)

如果我希望对Event进行排序(例如,按事件开始时间排序),我该如何管理更改Event的字段? 一旦更改传播到那里,数据库将很好地处理它,但是在Java方面,这是否意味着要更改集合中的Event,我必须将其删除,更改并重新插入? 还是没有真正的方法可以在Hibernate映射的Java端维护排序顺序? (因此,我必须将其视为无序的,因此每当我想获取Event的排序列表时,都使用Java处理排序?)

编辑:糟糕,我刚刚在equals / hashCode上找到了这些讨论:

这根本不是一个陷阱,它正在增强您告诉它所期望的语义。 真正的问题是“当我所谓的关键字段发生变化时,平等会发生什么”。 是的,它直接出了窗。 因此,是的,您最终可能会遇到这样的情况,即有人根据您的键更改了集合中的一个字段,使其与另一个字段相等。 是的,您的业务逻辑需要处理。 更新事件对象时,必须确保新值不仅对字段有效,而且对于要放置它们的上下文也有效。在这种情况下,您将不允许更新事件对象重复现有事件。 在SQL中,此问题更为严重。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM