2012-02-25 7 views
5

私はOneToMany関係を持つ2つのエンティティを持っています。それを簡単にするために、彼らを学校と学生として、学校から学生への一方向の関係で考えてみましょう。私は特定の学生(特定の年齢、名前、ssn、...を持つ学生)を持っている学校のオブジェクトを検索したい。 私は(次のように、学校の名前のために)簡単なスクールのプロパティに次のような単純な基準を作成することができることを知っている:学生がいる一方で、私は特定のプロパティ値を持つ学生を照会することができますどのようにJPA CriteriaQuery OneToMany

ParameterExpression<String> p = criteriaBuilder.parameter(String.class, "schoolName"); 
      criteria = criteriaBuilder.and(criteria, criteriaBuilder.like(schoolRoot.get("schoolName") , p)); 
queryResult.setParameter("schoolName", schoolName + "%"); 

けど、基本的なプロパティではなくjava.util.Listとして表されますか?

誰かが私にこれを理解させる助けになることができますか?私は私の問題を説明することができたことを願っています。

おかげ

答えて

4
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder(); 
CriteriaQuery<School> query = criteriaBuilder.createQuery(School.class); 
Root<School> schoolRoot = query.from(School.class); 
Join<School, Student> join = schoolRoot.join(School_.students); 
query.where(criteriaBuilder.equal(join.get(Student_.name), "john")); 

それはすべての学校で名前のジョンとの学生を検索します。

+0

jpaへようこそ。どのようにして「School_.students」を手に入れましたか?私は似たようなことをしようとしていますが、この '_ 'が何を意味するのか分かりません。 –

+0

JPAでの@VijayKalidindiメタモデルの生成について、これを見てください。 https://docs.jboss.org/hibernate/orm/5.0/topical/html/metamodelgen/MetamodelGenerator.html – BalaajiChander

0

似たようなことが起こると思います。

FROM School sch WHERE 'Student Name' = ANY (SELECT stud.name FROM sch.students stud)