非常简单,但我在 JPA 规范中找不到任何关于它的明确声明。如果我有一个没有@OrderBy
注释的基于List
的关系,例如:
@OneToMany
List<Child> children;
那么这个列表元素在 Java 中的顺序是什么?如果是多对多,这将是表中相应记录的顺序或间歇表中的条目Child
这似乎是合理的,但这是否是 JPA 提供程序的保证行为?
据我所知,规范不能保证订单。 如果您依赖订单,@OrderBy是要走的路。
编辑:引用JPA 1.0规范:
可移植应用程序不应期望跨持久性上下文维护列表的顺序,除非使用 OrderBy 构造并且对列表的修改遵循指定的顺序。否则,顺序不是永久性的。
(第19页,脚注[4])
此外,当您的实体没有子项时,JPA 规范不会指定在检索列表时它是否应返回空列表或 null,因此请务必检查它以避免空指针异常。
没有保证的行为,每次的顺序可能不同。它发生在我休眠上:当我刷新页面时顺序发生了变化。
搜索时对搜索结果进行排序,而不是在类及其属性的定义中排序。