我有以下SQL查询:
SELECT
tos.ID
FROM
TESTCYCLE_OPCO_SETTING tos
JOIN OPCO o
ON o.ID = tos.OPCO_ID
JOIN TESTCYCLE tc
ON tc.ID = tos.TESTCYCLE_ID
LEFT OUTER JOIN BUILD b
ON b.ID = tc.BUILD_ID
LEFT OUTER JOIN BUILD_OPCO_SETTING bos
ON bos.BUILD_ID = b.ID
AND bos.OPCO_ID = o.ID
需要的是,OPCO_ID形式TESTCYCLE_OPCO_SETTING用于获取相应的BUILD_OPCO_SETTING。我用" AND"做了这个。最后一次加入的条件。
我现在想要创建一个Hibernate Critera查询并为连接创建以下别名:
criteria.createAlias("opco", "opco");
criteria.createAlias("testcycle", "testcycle");
criteria.createAlias("testcycle.build", "build", CriteriaSpecification.LEFT_JOIN);
criteria.createAlias("build.buildOpcoSettings", "buildOpcoSetting", CriteriaSpecification.LEFT_JOIN, Restrictions.eqProperty("buildOpcoSetting.opco.id", "opco.id"));
然而,第四个别名引发SQL错误,我想我错误地使用它来实现我想要实现的目标。如果我更换属性" opco.id"它具有特定的数值,但当然这对我没有帮助。 有什么想法吗?
答案 0 :(得分:1)
自己找到解决方案。使用" opco" " buildOpcoSetting"中的别名别名导致生成的SQL中的连接顺序错误,并且额外的" opco"加入。将其替换为来自" testcycleOpcoSetting"的opco引用。哪个工作正常。
criteria.createAlias("build.buildOpcoSettings", "buildOpcoSetting", CriteriaSpecification.LEFT_JOIN,Restrictions.eqProperty("buildOpcoSetting.opco.id", "testcycleOpcoSetting.opco.id"));