2014-03-13 70 views
1

我使用MySQL 5.5與Hibernate 3.6和JPA 2.0。我有一個用戶表,其中firstName也可以是null或空字符串。我想讓這些空的firstName結果保留在我的搜索結果中。對於我寫了下面的SQL查詢它工作得很好:JPA Criteria API在聲明中的順序中使用ISNULL

SELECT * FROM User ORDER BY ISNULL(firstName), firstName = "", firstName ASC LIMIT 100 

現在想使用標準的API來此轉換爲JPA,我不十分確定有關的順序。以下是我有:

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))); 

然而,上述代碼段中不起作用,因爲CriteriaBuilder.isNull()方法traslated到IS NULL,而不是到MySQL的ISNULL()函數。我得到以下異常:

org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: is null 

如何在ORDER BY語句JPA 2.0

回答

1

這是不可能的檢查空的任何想法。在JPA中,只能選擇ORDER BY字段(位於查詢的SELECT部分)。問題是沒有IS_NULL函數,可以在SELECT部分中使用。

+0

所以是有另一種方式來放置空和空字符串項在底部JPA標準API – DevNG

+0

的結果我看到一個解決方案:NativeQueries。 –

0

我爲你做什麼,最後我用這種方式解決它完全相同的問題,也許你可以試試:

CriteriaQuery<> query; 
    query.orderBy(cb.desc(cb.selectCase(). 
when(cb.isNull("field name"),0).otherwise(1)), 
cb.asc("field name");