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請求。
一位同事爲我提供了一種解決方法。仍然不知道爲什麼查詢忽略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
然後你應該回答你自己的問題,並接受答案。 – sharakan 2013-06-07 17:05:41
謝謝 - 我認爲那是我的第一篇文章,當時我沒有被允許回答我自己的問題,所以我將它添加爲評論,而不是! – headlikearock 2013-06-07 20:40:12