Hibernate @OrderBy(“firstName ASC”)不区分大小写?

时间:2016-07-15 17:01:12

标签: java spring hibernate jpa annotations

我们使用hibernate并拥有一个包含成员列表的团队对象:

@OrderBy("firstName ASC")
private List<User> members = new ArrayList<User>();

但是我们希望它不区分大小写并且不敏感,这种方式例如较低的字母a将低于其他大写字母。 在第2.2.5.3.4章的hibernate documentation中。我找到了如何使用@OrderBy注释进行排序,但没有提示如何对这种情况不敏感。

亲切的问候

2 个答案:

答案 0 :(得分:0)

您可以通过使用LOWERUPPER

注释排序列来指定不区分大小写的排序
@OrderBy("UPPER(firstName) ASC")
private List<User> members = new ArrayList<User>(); 

下面是hibernate生成的SQL

SELECT user0_.id AS id1_0_0_,
       user0_.firstname AS firstname2_0_1_,
       user0_.lastname AS lastname3_0_1_
FROM user user0_
WHERE user0_.user_id=?
ORDER BY upper(user0_.firstname)

答案 1 :(得分:0)

要通过普通字段以外的其他内容进行排序,您必须将它也放在select子句中,所以

SELECT e, UPPER(e.firstName) AS firstNameUpper FROM MyEntity e WHERE ... ORDER BY firstNameUpper ASC

显然,您必须在结果处理中允许额外的结果项。请参阅JPQL BNF