【发布时间】:2014-03-13 11:22:33
【问题描述】:
我将 MySQL 5.5 与 Hibernate 3.6 和 JPA 2.0 一起使用。我有一个带有 firstName 的 User 表,它也可以是 null 或空字符串。我想在我的搜索结果中将那些空的 firstName 结果放在最后。为此,我编写了以下 SQL 查询,它工作得很好:
SELECT * FROM User ORDER BY ISNULL(firstName), firstName = "", firstName ASC LIMIT 100
现在想使用标准 API 将其转换为 JPA,但我不太确定 order by。这是我所拥有的:
criteriaQuery = criteriaQuery.orderBy(cb.asc(cb.isNull(users.get(User_.firstName))), cb.asc(cb.equal(users.get(User_.firstName), "")), cb.asc(users.get(User_.firstName)));
但是,上面的代码 sn-p 不起作用,因为 CriteriaBuilder.isNull() 方法被转换为 IS NULL 而不是 MySQL 的 ISNULL() 函数。我得到以下异常:
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: is null
关于如何使用 JPA 2.0 在 Order by 语句中检查 null 的任何想法
【问题讨论】: