8

最初の結合式が JPA API によって自動的に構築される次のような結合参照があります。

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> c = cb.createTupleQuery();
Root<Demand> demands = c.from(Demand.class);
Join<Demand, Metadata> joinMetadata = demands.join("metadatas", JoinType.LEFT);

しかし、Metadata.type="AFFECTATION_KEY" のような joinMetadata に追加の条件を追加したいのですが、方法がわかりません。

助けてくれてありがとう

4

2 に答える 2

12

JPA

JPA 2.0 は、ON 句をサポートしていないため、常にマッピング結合列のみで結合します。一方、JPA 2.1 はこれをサポートしています。

... 
Join<Demand, Metadata> joinMetadata = demands.join("metadatas", JoinType.LEFT);
joinMetadata.on(cb.equal(joinMetadata.get("type"), "AFFECTATION_KEY"));

EclipseLink

EclipseLink 2.4 では、ON 句がサポートされています。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ONを参照して ください

また、句サポートを提供するEclipseLinkネイティブ式APIを使用して、基準APIを介して可能です。on

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria#JpaCriteriaBuilder_and_EclipseLink_Extensionsを参照して ください

于 2012-06-18T13:10:48.100 に答える
7

また、HibernateのCriteriaAPIバージョン3.6もそれをサポートしています。

    Criteria c = session.createCriteria(Tuple.class);

    c.createAlias("demands", "d")
    .createAlias("d.metadata", "m", 
        Criteria.LEFT_JOIN, Restrictions.eq("m.type", "AFFECTATION_KEY"));

または、その最後のビットにRestrictions.eqProperty()が必要な場合があります。4番目のパラメーターを持つcreateAlias()の過小評価されているバージョンに注意してください。これがドキュメントからの引用です

パラメーター:

  • associationPath-ドットで区切られたプロパティパス
  • alias-結合されたアソシエーションに割り当てるエイリアス(後で参照するため)。
  • joinType-使用する結合のタイプ。
  • withClause-結合条件に追加される基準(ON句)

Hibernate API 3.6

于 2012-06-18T22:35:05.693 に答える