gpt4 book ai didi

hibernate - JPQL 中的 HQL 'with' 子句

转载 作者:行者123 更新时间:2023-12-04 15:13:56 28 4
gpt4 key购买 nike

来自 Hibernate 3.6 文档:

You may supply extra join conditions using the HQL with keyword.


from Cat as cat
left join cat.kittens as kitten
with kitten.bodyWeight > 10.0

with子句允许对 JOIN 条件(ON 子句)添加限制。 JPQL 中有这样的东西吗?

当我运行以下 JPQL 时:
select c from ContainerDef c left join fetch c.displayState ds where c.id = 1 and ds.user.id = 2

生成以下 SQL:
select
...
from
CONTAINER_DEF containerd0_
left outer join
USER_CONTAINERDEF displaysta1_
on containerd0_.CONTAINERDEF_ID=displaysta1_.CONTAINERDEF_ID
where
containerd0_.CONTAINERDEF_ID=?
and displaysta1_.AUTHUSER_ID=?

真正应该生成的是:
select
...
from
CONTAINER_DEF containerd0_
left outer join
USER_CONTAINERDEF displaysta1_
on containerd0_.CONTAINERDEF_ID=displaysta1_.CONTAINERDEF_ID
and displaysta1_.AUTHUSER_ID=?
where
containerd0_.CONTAINERDEF_ID=?

我确定我缺少 HQL 的正确 JPQL 子句 with .

最佳答案

但是您可以使用 Criteria API 来实现

    Criteria crit = session.createCriteria(Cat.class);
crit.createAlias("kittens", "kitten",
Criteria.LEFT_JOIN, Restrictions.gt("weight", 10.0);

List<Cat> catsWithFatKittens = crit.list();

这是 Criteria.createAlias() 几乎没有记录的签名以 Restriction 对象作为第四个参数。它工作得非常好,值得学习 Criteria API 来获得该功能。

关于hibernate - JPQL 中的 HQL 'with' 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12394038/

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