2014-09-11 132 views
0

加入我有以下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。我在最后一个JOIN中用“AND”条件完成了这项工作。

我现在要创建一个Hibernate查询性判据出这一点,并创建以下别名的加入:

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

我自己找到了解决方案。在“buildOpcoSetting”别名中使用“opco”别名会导致生成的SQL中的连接顺序错误,并会导致额外的“opco”连接。将其替换为“testcycleOpcoSetting”中的opco参考,其工作正常。

criteria.createAlias("build.buildOpcoSettings", "buildOpcoSetting", CriteriaSpecification.LEFT_JOIN,Restrictions.eqProperty("buildOpcoSetting.opco.id", "testcycleOpcoSetting.opco.id"));