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