1

好的,这是这个问题的后续问题,因为我现在真的很困惑。

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

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

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

编辑:呸,我刚刚在equals/hashCode上发现了这些讨论:

4

1 回答 1

0

这根本不是一个陷阱,它强制执行你告诉它期望的语义。真正的问题是“当我所谓的关键字段发生变化时,平等会发生什么”。是的,它就在窗外。所以,是的,您最终可能会遇到这样的情况:有人根据这些键更改了您集合中的一个字段,使其与另一个字段相等。是的,您的业务逻辑需要处理这个问题。更新 Event 对象时,您必须确保新值有效,不仅适用于字段,而且适用于您将它们放入的上下文。在这种情况下,您不能允许更新的事件对象重复一个现有的事件。这个问题在 SQL 中更加难看。

于 2009-07-02T22:44:02.867 回答