Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee JPA标准联接_Jakarta Ee_Jpa_Entity_Criteria - Fatal编程技术网

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();
这将是任何子项的值都小于该值。对于所有子项,您都需要执行子查询。

太好了!因此“加入”由子项->父项和完成。非常感谢!