我正在尝试实现这样的查询:
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.*"));
但我只能在这里添加一列,不能在查询中使用通配符。
非常感谢任何帮助。
答案 0 :(得分:0)
您应该从表'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());