【问题标题】:JPA @OrderBy Annotation - Ordering StringsJPA @OrderBy 注释 - 排序字符串
【发布时间】: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


    【解决方案1】:

    @OrderBy 将根据数据库进行排序,因为它将是您的 SQL 查询的一部分。将@SortComparator 与自定义比较器一起使用将获得您的结果。您也可以考虑将 2 组合起来(@OrderBy 以便您从数据库中以某种一致的顺序返回,然后将 @SortComparator 用于所需的顺序)

    不确定您是否知道如何编写比较器,但this question 是一个开始。

    【讨论】:

    • @SortComparable 来自哪里?
    • 错字,应该是@SortComparator .. 更新我的答案
    【解决方案2】:

    您可能需要考虑将字符串作为 0 前缀存储到固定的最大长度,例如:001、023、234 等。然后使用正常的字符串 alpha 比较,排序将正常工作。

    请参阅Ordering results by computed value in Hibernate 以获得接近同一事物的 JPA 特定实现方式。

    另一种选择是将您的集合存储在带有自定义比较器的 TreeSet 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2011-02-04
      • 1970-01-01
      • 2013-11-21
      • 2014-12-02
      相关资源
      最近更新 更多