Hibernate条件查询条件的连接

时间:2014-09-11 09:43:03

标签: sql hibernate hibernate-criteria

我有以下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"它具有特定的数值,但当然这对我没有帮助。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

自己找到解决方案。使用" opco" " buildOpcoSetting"中的别名别名导致生成的SQL中的连接顺序错误,并且额外的" opco"加入。将其替换为来自" testcycleOpcoSetting"的opco引用。哪个工作正常。

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