JPQL中的HQL'with'子句

kma*_*oor 6 hibernate hql jpql

从Hibernate 3.6文档中:

您可以使用带有关键字的HQL提供额外的加入条件。

from Cat as cat
left join cat.kittens as kitten
    with kitten.bodyWeight > 10.0
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

生成以下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=?
Run Code Online (Sandbox Code Playgroud)

真正应该生成的是:

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=? 
Run Code Online (Sandbox Code Playgroud)

我确定我缺少适用于HQL的JPQL子句with

Mik*_*unu 1

不,JPQL 中没有这样的功能。JPA 2.1 主题列表中提到了对特定条件加入的支持:

-- 支持具有 ON 条件的外连接;

所以也许 JPQL 将来会有它。