2013-06-26 78 views
0

休眠嵌套查詢是否有更多鈔票來創建一個標準生成以下SQL:使用標準

select name from (select distinct name from person) as aliasname order by lower(name); 

這裏有兩個SQL -

  1. select distinct name from person

  2. select name from <output of 1> as aliasname order by lower(name)

我想創建標準,然後做criteria.list()

回答

-1

我沒有答案給你,但你爲什麼要做第二次選擇?

SELECT DISTINCT NAME FROM PERSON AS ALIASNAME ORDER BY LOWER(NAME) 

會返回相同的數據。

+0

這實際上給了在Postgres爲錯誤:錯誤:對於SELECT DISTINCT,ORDER BY表達式必須出現在選擇列表中。所以我要選擇兩個選擇(嵌套) – user2523794

+0

您不能按不在'select'部分中的列進行排序。 –

1

我認爲,這將滿足您的需求:

criteria.addOrder(Order.asc("name").ignoreCase()) 
     .setProjection(Projections.distinct(Projections.property("name"))) 
     .list(); 

或者,這個標準使用的DetachedCriteria有名字的投影爲子查詢:

DetachedCriteria distinctNamesCriteria = DetachedCriteria.forClass(Person.class); 
distinctNamesCriteria.setProjection(Projections.distinct(Projections.property("name"))); 

criteria.add(SubQueries.propertyIn("name", distinctNamesCriteria)) 
     .addOrder(Order.asc("name").ignoreCase()) 
     .list(); 
+0

親愛的OGZD,在你的總結中,缺少兩件事:1.它不適用於較低(需要使用.ignoreCase()),2.它不給予嵌套選擇。由於此查詢「通過較低(名稱)從人員順序選擇不同名稱;」在postgres失敗,我正在尋找解決方法查詢問題描述爲「選擇名稱(從人名中選擇不同的名稱)作爲別名名稱order by lower(name)」 – user2523794

+0

hey there,更新了代碼。 – ogzd

+0

您確定由基因處理返回的結果集與問題中提到的相同嗎?以及我已經在更新的代碼之前嘗試了這一點,並得到了不同的結果集。這個標準實際上不會返回DISTINCT記錄。如果你引用一個類似的鏈接(http://stackoverflow.com/questions/17313502/how-to-create-hibernate-criteria-with-distinct-in-this-case)來回答這個問題會很好 – user2523794