如何在hibernate命名查询中使用order by子句进行不区分大小写的列表

时间:2014-08-22 00:48:50

标签: hibernate sql-order-by hql

我有一个用户表

用户

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查询

1 个答案:

答案 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的参数不是以下之一:

  1. state_field_path_expression,其值为SELECT子句中指定的实体或可嵌入类抽象模式类型的可订购状态字段,具体如下:

    •general_identification_variable

    •single_valued_object_path_expression

  2. state_field_path_expression

  3. 中评估为同一实体的相同状态字段或SELECT clause的可嵌入抽象模式类型的state_field_path_expression
  4. 一个result_variable,它引用SELECT clause中可订购项目,该项目已指定了相同的result_variable。这可能是state_field_path_expression中的aggregate_expression,scalar_expression或SELECT clause的结果。例如,以下四个查询是合法的。

  5. 如果它不适用于您使用的JPA实现,则必须使用以下查询:

    select u, LOWER(u.name) AS name_order 
    from Users as u 
    order by name_order 
    

    缺点是查询的结果是对象数组列表,每个列表中的第一个元素是Plan实体的实例和要丢弃的第二个元素。

相关问题