【问题标题】:Hibernate criteria query for join with condition休眠条件查询以条件连接
【发布时间】:2014-09-11 09:43:03
【问题描述】:

我有以下 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

需要的是使用来自 TESTCYCLE_OPCO_SETTING 的 OPCO_ID 来获取相应的 BUILD_OPCO_SETTING。我在最后一次 JOIN 中使用“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"));

但是,第 4 个别名会引发 SQL 错误,我认为我将其错误地用于我想要实现的目标。如果我用特定的数值替换属性“opco.id”,它可以工作,但这当然对我没有帮助。 有什么想法吗?

【问题讨论】:

    标签: sql hibernate hibernate-criteria


    【解决方案1】:

    自己找到了解决方案。在“buildOpcoSetting”别名中使用“opco”别名会导致生成的 SQL 中的连接顺序错误以及额外的“opco”连接。将其替换为“testcycleOpcoSetting”中的 opco 参考,效果很好。

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

    【讨论】:

      猜你喜欢
      • 2016-05-02
      • 2014-09-24
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2017-03-21
      相关资源
      最近更新 更多