2010-11-22 65 views
2

我正在使用Hibernate Criteria來返回結果列表(對各種列值進行過濾),但其中一些對象具有相同的值,我只需要一位「代表」。Hibernate Criteria唯一結果(除鍵以外的列)

例如:我返回了3個車輛對象的列表,其id /主鍵爲123,456,789,製造商代碼爲:111,111,222。我只想返回一個列表有兩個對象:123/111,789/222。

有沒有辦法給Hibernate Criteria添加一個限制,以便在這個例子中只返回唯一的(或第一個)製造商代碼結果?請讓我知道是否需要任何額外的信息/澄清。

感謝您的任何建議!

+0

http://stackoverflow.com/questions/8491796/hibernate-group-by-criteria-object 上面的鏈接對此是一個很好的答案。 – Ketan 2012-03-12 09:45:07

回答

1

的simpliest方法是實施適度ResultTransformer並將其應用到您的查詢。

如果你真的希望它在數據庫端執行,你需要一些棘手的查詢,像這樣(在HQL/JPQL爲了簡潔):

SELECT v FROM Vehicle v 
WHERE v.id = 
    (SELECT MIN(sv.id) FROM Vehicle sv WHERE sv.manufacturerCode = v.manufacturerCode) 
1

如果你正在使用JPA和Hibernate的,你可以使用類似如下:

Query q = em.createQuery("select cat from DomesticCat cat"); 
q.setMaxResults(1); 
List cats = q.getResultList(); //return any one cat from matched rows 

現在,剛剛得到列表中的第一個項目。 順便說一句,照顧NullPointerException並在進行任何進一步操作之前檢查列表的大小。

否則,如果您使用的是休眠沒有JPA。你可以去下面的一個[uniqueResult()]:

Query query =session.createQuery("select ao from AccountOwner ao "); 
AccountOwner ao=query.uniqueResult(); 
+0

我明白你在說什麼,但是這隻會返回1條記錄。我想要列出所有記錄,但在我的示例中,每個「製造商」僅限於一個結果。 – 2010-11-22 18:06:26

+1

然後,不要設置MaxResult /不去UniqueResult,而是修改查詢以爲'manufacturer'添加'group by'子句。 – 2010-11-22 18:13:01