6

Hibernate 3.6 のドキュメントから:

HQL with キーワードを使用して、追加の結合条件を指定できます。

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ます。

4

3 に答える 3

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()これは、制限オブジェクトを 4 番目のパラメーターとして使用した、ほとんど文書化されていない署名です。これは非常にうまく機能するので、機能を得るために Criteria API を学習する価値があります。

于 2012-10-15T20:37:31.603 に答える
1

いいえ、JPQL にはそのような機能はありません。特定の条件での参加のサポートは、JPA 2.1 トピック リストに記載されています。

-- ON 条件による外部結合のサポート。

したがって、おそらくJPQLは将来それを持っているでしょう。

于 2012-09-12T18:22:40.277 に答える