簡體   English   中英

如何使用Hibernate Criteria API從連接表中選擇不同的表?

[英]How to select distinct table from joined tables with Hibernate Criteria API?

我正在嘗試實現這樣的查詢:

SELECT DISTINCT C.* FROM A
join B on A.some_id = B.some_id  
join C on B.some_id = C.some_id;

使用Hibernate Criteria API。 我需要為整個 C表提供不同的結果,而不僅僅是對於它的某些列。

我試着這樣做:

Criteria criteria = createCriteria(C.class, "ct")
                .createCriteria("B", "bt")
                .createCriteria("A", "at")
                .//Some restrictions which are applied to all tables

就像那樣:

Criteria criteria = createCriteria(A.class, "at")
                .createCriteria("B", "bt")
                .createCriteria("C", "ct")
                .//Some restrictions which are applied to all tables

(雖然我看不出有什么不同)。 嘗試過廣告ResultTransformer:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

試圖將所有colums放入ProjectionsList然后:

criteria.setProjection(Projections.distinct(projectionList));

但該投影僅在列表中的第一列添加“distinct”關鍵字,但不向整個表添加。

我想要實現的目標是這樣的:

criteria.setProjection(Projections.distinct("C.*"));

但我這里只能添加一列,不能在查詢中使用通配符。

任何幫助是極大的贊賞。

您應該從表'C'中選擇列,而不是從表'A'中選擇,如下所示。

SELECT distinct (*) FROM C

它可以用hibernate標准編寫如下:

Criteria criteria = session.createCriteria(C.class);
criteria  = criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
ResultTransformer rt = new DistinctRootEntityResultTransformer();
List list = rt.transformList(criteria.list());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM