![](/img/trans.png)
[英]How to select specific entity from joined tables with Hibernate criteria?
[英]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.