gpt4 book ai didi

java - 如何在没有直接链接到两个表的情况下将 hibernate 条件用于左外连接

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:08 25 4
gpt4 key购买 nike

我正在尝试将 SQL 查询转换为 Hibernate 标准。

我的任务在 SQL 中运行:

    select * from objective 
left outer join conditionstate
on objective.conditionid = conditionstate.conditionid
and conditionstate.personid = XXXX
where objective.toto_id = YYYYY

目标不是直接映射到条件状态,而是映射到条件。

objective --> condition <-- condition_state

我测试过类似的东西:

    final DetachedCriteria criteriaObjective = 
DetachedCriteria.forClass(Objective.class);
criteriaObjective.createAlias("conditionState", "conditionState", Criteria.LEFT_JOIN);

没有成功..

最佳答案

如果没有看到您的实际映射,很难提出建议。根据您的解释并假设 condition 和 conditionState 都映射为多对一,您会编写如下内容:

final DetachedCriteria criteriaObjective = 
DetachedCriteria.forClass(Objective.class);
criteriaObjective
.createCriteria("condition", Criteria.LEFT_JOIN)
.createCriteria("conditionState", Criteria.LEFT_JOIN)
.add(Restrictions.eq("personid", "XXXX") );
criteriaObjective.add(Restrictions.eqProperty("toto_id", "YYYY") );

请注意,以上内容等同于您提供的 SQL 查询,因为“personid”条件将作为“WHERE”子句的一部分生成。据我所知,使用 Criteria API 进行带条件的左连接是不可能的——您可能需要使用提供 with keyword 的 HQL。为了那个确切的目的:

select o from objective as o
left join o.condition as c
left join c.conditionState as cs
with cs.person_id = 'XXXX'
and o.toto_id = 'YYYY'

关于java - 如何在没有直接链接到两个表的情况下将 hibernate 条件用于左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com