列表关系中的项目顺序

时间:2012-05-10 07:36:33

标签: java jpa orm

这可能非常容易,但我在JPA规范中找不到任何明确的声明。如果我没有List注释的基于@OrderBy的关系,例如:

@OneToMany
List<Child> children;

那么Java中这个列表元素的顺序是什么?这似乎是合理的,这将是Child表中的相应记录或中间表中的条目的顺序,如果它是多对多的,但是JPA提供者的保证行为是什么?

4 个答案:

答案 0 :(得分:2)

据我所知,规范并不保证订单。如果您依赖订单,@OrderBy就是您的选择。

编辑:引用JPA 1.0规范:

  

除非使用OrderBy构造并且对列表的修改遵循指定的顺序,否则便携式应用程序不应期望跨持久性上下文维护列表的顺序。订单不是持久的。

(第19页,脚注[4])

答案 1 :(得分:2)

此外,当您的实体没有子节点时,JPA规范不会指定它是否应返回空列表,或者在您检索List时指定null,因此请务必检查它以避免使用nullpointerexceptions。

答案 2 :(得分:1)

没有保证的行为,订单每次都可能不同。它发生在我的休眠状态:当我刷新页面时,顺序发生了变化。

答案 3 :(得分:0)

您可以在搜索时订购搜索结果,而不是在类及其属性的定义中。