Search code examples
hibernatehqljpql

HQL 'with' clause in JPQL


From Hibernate 3.6 documentation:

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

This with clause allows to add a restriction on the JOIN condition (ON clause). Is there any such thing in JPQL?

When I run the following JPQL:

select c from ContainerDef c left join fetch c.displayState ds where c.id = 1 and ds.user.id = 2

The following SQL is generated:

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=?

What should really get generated is:

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=? 

I am sure I'm missing the right JPQL clause for HQL's with.


Solution

  • No, there is no such a feature in JPQL. Support for joining with specific condition is mentioned in JPA 2.1 topic list:

    -- support for outer joins with ON conditions;

    So maybe JPQL will have it in future.