java如何定义标准。不同的根实体实际工作吗?
我目前正在尝试构建一个SQL(纯SQL,直接在数据库上执行-我没有特别使用hibernate)来从数据库中获取数据。这是一个基于Java实现(hibernate)条件查询的导出,我想从其他表中向其中添加其他信息
在Java标准查询中,我有一条语句如下:
Criteria criteria = session.createCriteria(MyEntity.class);
criteria.createCriteria("fk").add(Restrictions.in("sysid", <<someListofIDsfromPreviousQuery>>))
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
从表a(“someListofIDsFromPreviousQuery”)的ID列表中生成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个结果
克里特拉怎么样。DISTINCT_ROOT_实体实际上选择了表B的哪个条目作为其“DISTINCT实体”?还是我这里出了什么问题
如果有区别的话:我正在尝试用OracleDB SQL方言编写查询
# 1 楼答案
经过一些搜索、实验,通常会感到困惑——似乎DISTINCT_ROOT_实体在如何确定表B中的值方面没有做出任何实际决策。它只是“随机”地从联接中获取结果集的第一个值
因此,我试图基于SQL的代码实际上是错误的,对它所在的应用程序来说是危险的。很高兴知道<咳嗽
# 2 楼答案
我发现我们可以通过以下两种不同的方法得到不同的结果
这是预测,给出的结果与