java - 如何使用 Hibernate Criteria API 从连接表中选择不同的表?

标签 java sql hibernate criteria hibernate-criteria

我正在尝试实现这样的查询:

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/

相关文章:

java - Android反射方法错误

c# - 创建 Windows 服务时 SchedularCallBack 出错

SQL 如何将两列数据转换为不同的列?

java - Hibernate、MySQL 和 Maven : am I losing my configuration?

java.util.ArrayList 无法转换为 java.lang.Long hibernate 分离条件

java - jxmapkit 点击事件返回不正确的经纬度

java - 模拟 Apache HttpClient 4.4 PoolingHttpClientConnectionManager

MySQL - 负 double 和字符语法 1064 错误

java - 从数据库 hibernate hql 检索记录时出现空指针异常

java - 在本地计算机中克隆JUnit 5之后,在执行 “assemble”任务时编译时间错误