2011-08-02 87 views
1


我有两个具有多对一关系的实体类。我需要选择所有具有最小值小于所提供的子记录的父记录。
JPA标准加入

@Entity
class Parent; {
String source;
}

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

我需要做的是选择所有的父类,其中Parent.source = X和分钟(Child.value> < Y.如何添加父/子实体和具体的加盟如果父母有一个孩子回一对多选择标准是什么?

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

太棒了!所以“加入”是由孩子 - >父母AND完成的。非常感谢! – Gadi