2009-07-02 62 views
0

好的,这是this one的后续问题,因为我现在非常困惑。Hibernate中实体集合的陷阱

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

Event s是存储在数据库中的实体,因此我可以更改事件字段。什么是正确的方式来处理Event可变性,并没有得到Java Set身份检查困惑?在这种情况下,你是否应该覆盖hashCode()和/或equals()? (例如,标识=基于对象参考标识)

如果我要订购Event(例如通过事件开始时间),如何管理更改Event的字段?一旦变化传播到那里,数据库就会处理好,但在Java方面,这是否意味着为了更改集合中的事件,我必须将其删除,更改并重新插入?还是没有真正的方法来维护Hibernate映射的Java端的排序顺序? (因此我必须把它当作无序的,因此处理Java中的排序,每当我想要得到的Event个排序列表?)

编辑:呸,我只是发现了等号这些讨论/的hashCode:

回答

0

这不是一个缺陷可言,它强制你告诉它期望的语义。 真正的问题是“当我所谓的关键字段发生变化时,平等会发生什么”。是的,它直接从窗口出来。所以,是的,你最终可能会在某个人的情况下改变你的设置中的一个字段,使其与另一个字段相同,并基于这些关键字。 是的,您的业务逻辑需要处理。更新Event对象时,必须确保新值不仅适用于字段,而且适用于您将其放入的上下文。在这种情况下,您不能允许更新的事件对象重复现有的事件。 这个问题在SQL中更丑陋。