0

5 つのエンティティで構成された単純なオブジェクト モデルを用意します。

  1. 会社
  2. 組織
  3. 住所
  4. クラブ
  5. グループ

会社、クラブ、およびグループがすべて組織に関連付けられていることを示します ここに画像の説明を入力

会社は単一の組織に関連付けられています。(グループとクラブも単一の組織に関連付けられています。これらは一方向であり、組織にはその所有者への参照が含まれていません)。組織は 0 個以上のアドレスを持つことができます。

サブクエリを使用して、Address の属性である特定の郵便番号に基づいて Company オブジェクトにアクセスできます。特定の郵便番号を持つ企業にアクセスできる JPQL クエリを次に示します。

@Query("select p from Company p, Organization org where (p.organization = org.id) and exists (select 1 from Address ad where zipcode = :zipcode and ad.organization = org.id)")

JPA Criteria API を使用して同じことを行うにはどうすればよいでしょうか?

4

1 に答える 1

0

これにより、内部結合を使用して指定された郵便番号を持つ会社が選択されます。これでよろしいですか?

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Company> cq = cb.createQuery(Company.class);
Root<Organization> root = cq.from(Organization.class);
Join<Organization, Address> adr = root.join("addresses");
cq.select(root.get("company"));
cq.where(cb.equal(adr.get("zipcode"), zipcode));

プロパティがない場合、Organization 経由で Company にアクセスすることはできません。あなたの会社が Organization への参照を持っている場合、Organization クラスに次のコードを追加して双方向マッピングへの一方向マッピングを行うことができます:

@OneToOne(mappedBy="organization") //Providing the name of property in Company 
private Company company;
于 2012-06-04T13:13:28.110 に答える