我正在尝试使用 Hibernate criteria api 执行子查询,但无法完全弄清楚如何执行它。假设有 2 个表,SHOPS 和 EMPLOYEES,其中 SHOPS 包含所有商店信息,EMPLOYEES 是所有商店中所有员工的大表(未设置外键)。我正在尝试编写一个查询,该查询从 SHOPS 表中检索商店 ID 和地址,然后通过 EMPLOYEES 表中的联接和计数来检索商店中的雇员人数。像这样的事情:
SELECT a.SHOP_ID, a.SHOP_ADDRESS, (SELECT COUNT(*) FROM
SHOP_EMPLOYEES b WHERE b.SHOP_ID = a.SHOP_ID) as NUM_EMPLOYEES FROM <--Problem here
SHOPS a
WHERE
QUERY_STATUS ='Open'
所以我有一个 Java 类 Shop,其中包含 shopId、shopAdres、numEmployees 和类似的员工。
我的子查询:
DetachedCriteria subquery = DetachedCriteria.forClass(
Employee.class, "b").add(
Property.forName("b.shopId").eqProperty("a.shopId"))
.setProjection(
Projections.projectionList().add(
Projections.rowCount()));
以及主要标准查询:
List shopListRet = session.createCriteria(Shop.class, "a")
.setProjection(
Projections.projectionList().add(
Projections.property("a.shopId"))).add(Subquery..."DONT KNOW WHAT SHOULD COME HERE").list();
我的问题是:
- 如何将分离查询关联为子查询以收集 Shop 类中类变量 numEmployees 中的计数结果?
谢谢
-J
使用 SQL 投影来添加子查询。
String subSql = "SELECT COUNT(*) FROM SHOP_EMPLOYEES b WHERE b.SHOP_ID = a.SHOP_ID"
...
.add( Projections.sqlProjection(
subSql ,
new String[] { "NUM_EMPLOYEES" },
new Type[] { Hibernate.LONG }
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)