我正在尝试实现这样的查询:
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 . 我需要为 whole 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.*"));
但我这里只能添加一列,不能在查询中使用通配符 .
任何帮助是极大的赞赏 .
1 回答
您应该从表'C'中选择列,而不是从表'A'中选择,如下所示 .
它可以用hibernate标准编写如下: