2013-04-30 136 views
9

已更新 - 請參閱回答評論JPQL Hibernate NULLS LAST被忽略

我知道CriteriaQuery.orderBy不支持NULLS LAST。我試圖用一個TypedQuery,發現它似乎只是不顧一切後「NULLS LAST」 - 不拋出任何錯誤,只是忽略它:

String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" + 
      " ORDER BY c.primaryFlag DESC NULLS LAST, c.lastName ASC"; 

    TypedQuery<Contact> query = em.createQuery(sql, Contact.class); 
    query.setParameter("pCode", partnerCode);  

    return query.getResultList(); 

這將返回我的結果由主標誌descendings有序,先忽略,忽略姓氏排序。

如果我這樣做:

 String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'" + 
      " ORDER BY c.primaryFlag DESC, c.lastName ASC"; 

我得到初級和姓氏排序,但還是落得空第一,因爲它是一個Oracle數據庫。

當我添加NULLS LAST時,我大多驚訝地發現沒有錯誤消息,並且我希望通過一些語法調整,我可以讓它接受NULLS LAST請求。

+0

一位同事爲我提供了一種解決方法。仍然不知道爲什麼查詢忽略NULLS LAST,但我最終使用這個作爲我的解決方法: String sql =「SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag ='Y'」 \t \t +「ORDER BY nvl(c.primaryFlag,'N')DESC,c.lastName ASC」; 注意:該列的值爲'Y','N'或null。使用nvl我使用'N'來代替null。 – headlikearock 2013-04-30 16:51:36

+0

然後你應該回答你自己的問題,並接受答案。 – sharakan 2013-06-07 17:05:41

+0

謝謝 - 我認爲那是我的第一篇文章,當時我沒有被允許回答我自己的問題,所以我將它添加爲評論,而不是! – headlikearock 2013-06-07 20:40:12

回答

2

一位同事爲我提供了一種解決方法。不過不知道爲什麼查詢忽略NULLS LAST,但最後我用這個作爲我的解決方法:

String sql = "SELECT c FROM Contact c WHERE c.partnerCode =:pCode and c.activeFlag='Y'"    
+" ORDER BY nvl(c.primaryFlag, 'N') DESC, c.lastName ASC"; 

注:列的值是「Y」,「N」或空。使用nvl我使用'N'來代替null。