2014-09-11 134 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"));