我有一个用户表
用户
userId firstName
1 A
2 B
3 a
我的SQL查询(select * from User order by firstName
)返回正确的结果:
A
a
B
HQL命名查询(Select up from UserProfile up, User u where up.userId = u.userId order by upper(u.firstName)
)给出:
一个
乙
一个
有人可以解释一下这种行为以及解决方法以使不区分大小写的排序工作(注意:使用upper函数无效)。
我注意到Criteria has ignoreCase
函数,但我不想使用条件而是使用HQL查询
答案 0 :(得分:0)
<强> SQL 强>
SELECT UPPER(username) FROM users order by username;
<强>冬眠强>
例如,使用Hibernate,您可以将LOWER
函数用于p.name in ORDER BY
:
select u from Users as u order by LOWER(u.name)
我认为上述内容不能保证适用于所有JPA实现,因为ORDER BY
的参数不是以下之一:
state_field_path_expression,其值为SELECT子句中指定的实体或可嵌入类抽象模式类型的可订购状态字段,具体如下:
•general_identification_variable
•single_valued_object_path_expression
在state_field_path_expression
SELECT clause
的可嵌入抽象模式类型的state_field_path_expression
一个result_variable,它引用SELECT clause
中可订购项目,该项目已指定了相同的result_variable。这可能是state_field_path_expression
中的aggregate_expression,scalar_expression或SELECT clause
的结果。例如,以下四个查询是合法的。
如果它不适用于您使用的JPA实现,则必须使用以下查询:
select u, LOWER(u.name) AS name_order
from Users as u
order by name_order
缺点是查询的结果是对象数组列表,每个列表中的第一个元素是Plan实体的实例和要丢弃的第二个元素。