2012-02-25 2 views
5

OneToMany ilişkisine sahip iki varlığım var. Bunu basitleştirmek için, okuldan öğrencilere tek yönlü bir ilişki ile onları Okul ve Öğrenciler olarak düşünelim. Belirli bir öğrenciye sahip olan okul nesnesini bulmak istiyorum (belirli bir yaş, isim, ssn, ... olan bir öğrenci). Öğrencilerin iken Belirli bir özellik değerine sahip öğrencileri sorgulayabilir nasılJPA KriteriQuery OneToMany

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

ama: Ben (şöyle, Okul adı için) basit School'un özellikleri için aşağıdaki gibi basit kriterleri oluşturabilir biliyoruz Temel bir özellik olmak yerine java.util.List olarak temsil edilir?

Birisi bunu anlamama yardımcı olabilir mi? Umarım benim problemimi açıklayabildim.

Teşekkür

cevap

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")); 

Tüm okullarda adı john ile bir öğrenci arar.

+0

Yeni burada jpa için. School_.students'ı nasıl aldınız? Ben benzer bir şey deniyorum ama bu ne anlama geldiğini bilmiyorum. JPA'da –

+0

@ VijayKalidindi metamodel üretimi, Şuna bir bakın. https://docs.jboss.org/hibernate/orm/5.0/topical/html/metamodelgen/MetamodelGenerator.html – BalaajiChander

0

Sanırım bu benzer şeyi yapardı;

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