【发布时间】:2021-12-16 03:05:42
【问题描述】:
我目前正在尝试构建一个 SQL(纯 SQL,直接在数据库上执行 - 我没有特别为此使用 hibernate)来从我的数据库中获取数据。它是基于 Java 实现的(休眠)条件查询的导出,我想从其他表中添加其他信息。
在 Java Criteria 查询中,我有如下语句:
Criteria criteria = session.createCriteria(MyEntity.class);
criteria.createCriteria("fk").add(Restrictions.in("sysid", <<someListofIDsfromPreviousQuery>>))
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
从表 A 中的 ID 列表(“someListofIDsFromPreviousQuery”)中产生 1-1 结果集,表 B 中有多个结果(“MyEntity.class”)。
I know what DISTINCT_ROOT_ENTITY does 但我想知道它实际上是如何工作的,也就是说,等效的 SQL 会是什么样子?
根据上面的条件查询示例:
SELECT COUNT(*) FROM TABLEA a
WHERE a.property1=someValue AND a.property2=someOtherValue;
返回 2000 个结果。 (这是我的 ID 列表)
SELECT COUNT(*) FROM TABLEA a
JOIN TABLEB b ON b.fk = a.sysid -- <-- this is basically equivalent to what the criteria query above does, no?
WHERE a.property1=someValue AND a.property2=someOtherValue;
返回 2500 个结果。
Critera.DISTINCT_ROOT_ENTITY 是如何实际选择 TABLEB 的哪个条目作为其“独特实体”的?还是我这里有什么问题?
如果它有所作为:我正在尝试用 OracleDB SQL 方言编写我的查询。
【问题讨论】:
标签: java sql hibernate hibernate-criteria