我使用休眠的標準來打造,Postgres的查詢創建DISTINCT休眠標準:如何在這種情況下
criteria.addOrder(Order.asc(property).ignoreCase()).setProjection(
Projections.distinct(Projections.property("name")));
生成的SQL類似如下:
select DISTINCT name from table1 order by lower(name) asc;
當這個SQL被執行給出下面的錯誤:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
我知道這是反對postgres規則的東西,但w如果我查看錯誤,我發現我們不應該使用任何函數按順序排列。如果它然後使用我們需要有兩個變通:
使用嵌套查詢如下:
select name from (select distinct name from table1) as aliasname order by lower(name) asc;
BY子句中使用較低的功能都選擇和秩序。
select DISTINCT lower(name) from table1 order by lower(name) asc;
所以對於修復,我會選擇一個解決方案進入休眠側。如何創建一個標準,使我可以得到任何上述兩個sqls。
如何創建條件來獲取嵌套select。
如何從通過在順序中使用的功能必須在選擇適用的標準確保也
- 是休眠或DB側(療法任何更好的解決方案,而無需使用硬編碼SQL,的createQuery()或HQL)。
感謝事先你suggetions。
似乎與您之前的問題鬆散相關http://stackoverflow.com/q/16460070/398670。 –
嗨克雷格,很好的連接。同意它與我之前的問題有關。我試圖通過使用lower()函數而不是我的custom_sort函數來簡化上下文。僅供參考,我已經通過重寫Order類的toString()來解決我之前提到的與調用自定義數據庫函數有關的問題。你有什麼建議來解決這個問題嗎?謝謝 – akhi