Jakarta ee JPA标准联接
Jakarta ee JPA标准联接,jakarta-ee,jpa,entity,criteria,Jakarta Ee,Jpa,Entity,Criteria,我有两个具有多对一关系的实体类。我需要选择所有父记录,其中子记录的最小值小于提供的值。 @实体 班级家长;{ 字符串源; } @实体 类子项{ @多个单亲; int值; } 我需要的是选择Parent.source=X和min(Child.value>父项和完成。非常感谢!
我有两个具有多对一关系的实体类。我需要选择所有父记录,其中子记录的最小值小于提供的值。
@实体
班级家长;{
字符串源;
}
@实体
类子项{
@多个单亲;
int值;
}
我需要的是选择Parent.source=X和min(Child.value>
CriteriaBuilder cb=context.em().getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Parent.class);
根r=cq.from(父类);
谓词p=cb.conjunction();
p=cb.和(p,cb.相等(r.get(“源”),X));
表达式y=cb.literal(y);
//如何处理y?
cq.其中(p);
TypedQuery tq=context.em().createQuery(cq);
tq.setFirstResult(0);
tq.setMaxResults(100);
返回tq.getResultList();
如果父母有一个孩子回到家里,可能会更容易些。但对于你现在的模型,应该是这样的
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();
这将是任何子项的值都小于该值。对于所有子项,您都需要执行子查询。太好了!因此“加入”由子项->父项和完成。非常感谢!