0

我必须按日期订购子实体列表。现在我正在这样做:

@OrderBy(clause = "arrivalDate ASC, arrivalTime ASC, departureDate ASC, departureTime ASC")

其中到达日期和出发日期包含日期,到达时间和出发时间包含时间,但它们都是日期类型。

一切都很好,直到我将新项目添加到列表中 - 它始终出现在列表的末尾。我该如何解决?谢谢

4

1 回答 1

5

OrderBy 子句仅在 Hibernate 从数据库中选择实体时使用。一旦列表在内存中,它就可以像 Java 中的任何其他列表一样工作。如果您向列表中添加某些内容,则该List.add()方法的工作方式就像它在其 javadoc 中记录的那样,并且该元素将添加到列表的末尾。

如果您希望将新项目插入到列表中的适当索引处,您必须自己找到此索引,或者将其添加到列表中并使用比较器对列表进行排序,该比较器根据项目的到达日期对项目进行排序, 到达时间等

当然,请注意,如果您更改列表中已存在的项目中的其中一个字段,则列表将不再具有正确的顺序。

也许您应该完全避免使用 @OrderBy 注释,而只需getSortedItems()在您的实体中添加一个方法,该方法将返回项目列表的排序副本。

于 2012-06-15T07:26:40.903 回答