我必须按日期订购子实体列表。现在我正在这样做:
@OrderBy(clause = "arrivalDate ASC, arrivalTime ASC, departureDate ASC, departureTime ASC")
其中到达日期和出发日期包含日期,到达时间和出发时间包含时间,但它们都是日期类型。
一切都很好,直到我将新项目添加到列表中 - 它始终出现在列表的末尾。我该如何解决?谢谢
OrderBy 子句仅在 Hibernate 从数据库中选择实体时使用。一旦列表在内存中,它就可以像 Java 中的任何其他列表一样工作。如果您向列表中添加某些内容,则该List.add()
方法的工作方式就像它在其 javadoc 中记录的那样,并且该元素将添加到列表的末尾。
如果您希望将新项目插入到列表中的适当索引处,您必须自己找到此索引,或者将其添加到列表中并使用比较器对列表进行排序,该比较器根据项目的到达日期对项目进行排序, 到达时间等
当然,请注意,如果您更改列表中已存在的项目中的其中一个字段,则列表将不再具有正确的顺序。
也许您应该完全避免使用 @OrderBy 注释,而只需getSortedItems()
在您的实体中添加一个方法,该方法将返回项目列表的排序副本。