java - hibernate :@OrderBy

标签 java hibernate

我必须按日期对子实体列表进行排序。 现在我正在这样做:

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

其中arrivalDate和departmentDate包含日期,arrivalTime和departmentTime包含时间,但它们都是DATE类型。

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

最佳答案

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

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

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

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

关于java - hibernate :@OrderBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046176/

相关文章:

java - applicationContext.xml 与 sessionFactory bean 的配置冲突

java - 对现有数据库使用 Hibernate

java - Android 警报接收器从未触发

Java Swing - 一个很好的数字文本字段组件?

java - 如何在 tomcat 上的 servlet 下发送 XML 文件?

java - 反射 - getInterfaces() 显示奇怪的接口(interface)

java - Spring Boot 连接两个具有无效 FK 条目的实体

java - 将数据插入数据库(mongodb)

java - 观看奖励视频后,如何停止在 Android 应用程序中显示所有广告 1 天?

java - 如何使用 hibernate 将一些实体的值存储在另一个表中?