我正在尝试实现这样的查询:
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);
尝试将所有列放入 ProjectionsList 中,然后:
criteria.setProjection(Projections.distinct(projectionList));
但是该投影仅将“不同”关键字添加到列表中的第一列,而不是整个表。
我想要实现的目标是这样的:
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());
关于java - 如何使用 Hibernate Criteria API 从连接表中选择不同的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43979268/