您好,使用标准API编写子选择查询时遇到问题
sublselect应该从选定的q中获取一个参数
SELECT c.file_id as fid, s.person as person, s.fax_no as fax, s.phone_no as phone,(SELECT SUM( b.ammount )
FROM billing b
WHERE b.constants_file_id = c.file_id
) - (
SELECT
CASE
WHEN b.partioa_pay IS NULL
THEN "0"
ELSE SUM( b.partioa_pay )
END
FROM billing b
WHERE b.constants_file_id = c.file_id ) AS totalout
FROM constants c
LEFT JOIN firm_management s ON c.firm_management_firm_managment_id = s.firm_managment_id
WHERE s.firm_managment_id = ?
如您所见,针对c.file_id选定的总输出量
我玩了2天,在stackoverflow社区中没有运气好的maby sombody,他拥有强大的Java和休眠知识将能够为我提供帮助。
这就是我得到的证明2012-01-17 01:48:06,808错误[org.hibernate.util.JDBCExceptionReporter]-(会话F2C61D08758E0AA09CA6C99A5B6F2145,线程113调用ByDefenceFirm.getByDefenceFirm)
Criteria crit = session.createCriteria(Constants.class, "co");
crit.createAlias("co.provider", "pr", Criteria.INNER_JOIN)
.createAlias("co.firmManagement", "ins", Criteria.LEFT_JOIN)
.createAlias("co.law", "lw", Criteria.LEFT_JOIN)
.createAlias("co.billing", "bl", Criteria.LEFT_JOIN)
.setProjection(Projections.projectionList()
.add(Projections.property("co.fileId"))
.add(Projections.property("co.status"))
.add(Projections.property("co.asi"))
.add(Projections.property("pr.name"))
.add(Projections.property("ins.companyName"))
.add(Projections.property("lw.shortName")));
DetachedCriteria valueCrit = DetachedCriteria.forClass(Billing.class, "bl")
.setProjection(Projections.sum("bl.ammount"))
.setProjection(Projections.property("bl.constants"))
.add(Restrictions.eqProperty("bl.constants", "co.fileId"));
crit.add(Property.forName("co.fileId").eq(valueCrit));
crit.setProjection(Projections.property("co.billing"));
crit.add(Restrictions.eq("lw.lawOfficeId", prid));
resultList = crit.list();
如果有人有任何建议,将不胜感激。
最佳答案
在条件子句中,select子句中的子选择是不可能的。您必须使用HQL或SQL查询。
关于java - select子句中的 hibernate 条件SubSelect,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8891476/