Hibernate:如何维护插入顺序

6
我有一个实体列表,其中创建顺序很重要,但它们不包含可用于排序的时间戳。随着实体的创建,它们被添加到列表的末尾,因此它们将在列表本身中正确排序。使用Hibernate持久化列表后,实体会按照创建的顺序出现在数据库表中。但是,使用新的Hibernate会话检索列表时,列表现在是插入/创建的相反顺序。
这是预期行为吗?有没有办法以与表中显示的相同顺序检索列表?
主键是UUID,并且实体列表应始终在同一IP地址和JVM上创建。这意味着可以通过UUID进行排序,但我不想做出假设。
另一个可能性是,如果保证列表总是以相反的顺序出现,那么我可以始终向后处理它。
2个回答

4
JPA(Hibernate 实现)具有@OrderBy
@OneToMany
@OrderBy("uuidColumn")
private List<Something> list;

最终我采用了这种方法,并依赖于Hibernate生成的UUID,这些UUID可以按照它们被创建的时间进行排序,只要它们是在同一个JVM和同一个IP地址上创建的。 - jwaddell

3
你需要将列表作为list进行持久化。这样,你就会有一个额外的列来保存元素的顺序。
像袋子和集合这样的类型可以完成任务,但会失去元素的顺序。

我已经在使用列表,但似乎需要向数据库添加索引列才能使其正常工作(我正在使用注释来定义实体)。理想情况下,我希望避免对数据库结构进行任何更改,有没有办法做到这一点? - jwaddell
1
你尝试过使用@OrderColumn注释吗?在http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/的“Indexed Collections”部分中有相关内容。如果有效,请告诉我,以便我更新我的答案 :) - mcabral
是的,我在这方面很幸运。调整它的值确实会改变后续水合作用中的集合顺序。 - John Heinnickel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接