2011-08-02 13 views
1


多対1の関係を持つ2つのエンティティクラスがあります。私は、提供されたより小さい最小値を持つ子レコードを持つすべての親レコードを選択する必要があります。私は必要なもの
JPA基準結合

@Entity
class Parent; {
String source;
}

@Entity
class child {
@ManyToOne Parent parent;
int value;
}

親/子エンティティおよび特定に参加を追加する方法Parent.source = Xと分(Child.value> < Y.すべての親クラスを選択することです親が戻って子供をOneToMany持っている場合、選択基準?

CriteriaBuilder cb = context.em().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Parent.class);
Root r = cq.from(Parent.class);
Predicate p = cb.conjunction();
p = cb.and(p, cb.equal(r.get("source"), X));
Expression y = cb.literal(Y);
// what to do with y?
cq.where(p);
TypedQuery tq = context.em().createQuery(cq);
tq.setFirstResult(0);
tq.setMaxResults(100);
return tq.getResultList();

答えて

2

が簡単になります。しかし、あなたの現在のモデルでは、のようなものでなければなりません

CriteriaBuilder cb = context.em().getCriteriaBuilder(); 
CriteriaQuery cq = cb.createQuery(Parent.class); 
Root r = cq.from(Parent.class); 
Root child = cq.from(Child.class); 
Predicate p = cb.and(cb.equal(r.get("source"), X), cb.equal(child.get("parent"), r)); 
Predicate p = cb.and(p, cb.lt(child.get("value"), Y))); 
cq.where(p); 
TypedQuery tq = context.em().createQuery(cq); 
tq.setFirstResult(0); 
tq.setMaxResults(100); 
return tq.getResultList(); 

いずれの子でも、値より小さい値を持ちます。すべての場合、サブクエリを実行する必要があります。

+0

素晴らしい!したがって、 "join"はchild - > parent ANDによって行われます。どうもありがとう! – Gadi

関連する問題