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.
No, there is no such a feature in JPQL. Support for joining with specific condition is mentioned in JPA 2.1 topic list:
So maybe JPQL will have it in future.