2

School、SchoolType、および Country という名前の 3 つのテーブルがあります。School と SchoolType の関係を確認できます。クエリしたいのは;

「blabla」という名前の学校が少なくとも 1 つある Schooltypes と同じ ID を持つ国を選択します。

私の学校のクラス;

@JoinColumn(name = "school_type_ref", referencedColumnName = "school")
@ManyToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER)
private SchoolType schooltype;

私の SchoolType クラス;

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = CascadeType.ALL, mappedBy = "schooltype")
private List<School> schoolList;

private String id;

私の国のクラス;

private String id;
4

1 に答える 1

1

これをチェックして:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Country> c = cb.createQuery(Country.class);
Root<Country> countries = c.from(Country.class);

Subquery<Integer> sq = c.subquery(Integer.class);
Root<SchoolType> schoolTypes = sq.from(SchoolType.class);

sq.select(schoolTypes.<Integer>get("id")).where(
    cb.equal(schoolTypes.get("schoolList").get("name"), "blabla"));

c.select(countries).where(cb.in(countries.<Integer>get("id")).value(sq));

TypedQuery<Country> q = entityManager.createQuery(c);
List<Country> result = q.getResultList();

また、代わりにschoolTypes.<Integer>get("id")使用を試すこともできますschoolTypes.get(SchoolType_.id)が、私にはうまくいきません。

私の答えは、JPA 2.0、Criteria API、Subqueries、In Expressions に基づいています。

于 2013-09-06T13:00:03.827 に答える