【发布时间】:2014-04-24 08:17:27
【问题描述】:
我在我的实体类中使用@OrderBy 注释来对急切获取的集合进行排序。我订购的列是字符串类型。但是,在某些情况下,这些字符串可能包含数字。如何确保 OrderBy 注释将按数字顺序而不是 1,10,2,3,4,5,6,7,8,9 对存储为字符串的数字进行排序?
【问题讨论】:
标签: java hibernate jpa annotations sql-order-by
我在我的实体类中使用@OrderBy 注释来对急切获取的集合进行排序。我订购的列是字符串类型。但是,在某些情况下,这些字符串可能包含数字。如何确保 OrderBy 注释将按数字顺序而不是 1,10,2,3,4,5,6,7,8,9 对存储为字符串的数字进行排序?
【问题讨论】:
标签: java hibernate jpa annotations sql-order-by
@OrderBy 将根据数据库进行排序,因为它将是您的 SQL 查询的一部分。将@SortComparator 与自定义比较器一起使用将获得您的结果。您也可以考虑将 2 组合起来(@OrderBy 以便您从数据库中以某种一致的顺序返回,然后将 @SortComparator 用于所需的顺序)
不确定您是否知道如何编写比较器,但this question 是一个开始。
【讨论】:
@SortComparable 来自哪里?
您可能需要考虑将字符串作为 0 前缀存储到固定的最大长度,例如:001、023、234 等。然后使用正常的字符串 alpha 比较,排序将正常工作。
请参阅Ordering results by computed value in Hibernate 以获得接近同一事物的 JPA 特定实现方式。
另一种选择是将您的集合存储在带有自定义比较器的 TreeSet 中。
【讨论】: