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