来自Hibernate 3.6文档:
您可以使用带有关键字的HQL提供额外的连接条件。
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 with
的正确JPQL子句。
答案 0 :(得分:2)
但您可以使用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以获得功能。
答案 1 :(得分:1)
答案 2 :(得分:1)
JPA 2.1增加了对ON join条件的支持。
它也是比HQL更好的名称选择&#39;子句。