Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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
Java JPA标准Api-不在关系实体查询中_Java_Jakarta Ee_Jpa_Criteria Api - Fatal编程技术网

Java JPA标准Api-不在关系实体查询中

Java JPA标准Api-不在关系实体查询中,java,jakarta-ee,jpa,criteria-api,Java,Jakarta Ee,Jpa,Criteria Api,我在构建CriteriaQuery时遇到问题,无法检查此关系中的未映射实体 @Entity @Table(name="table1") public class Entity1 { //Some attributes @Column private Integer entity2ID; } @Entity @Table(name="table2") public class Entity2 { private Integer id; //Som

我在构建CriteriaQuery时遇到问题,无法检查此关系中的未映射实体

@Entity
@Table(name="table1")
public class Entity1 {

    //Some attributes

    @Column
    private Integer entity2ID;

}

@Entity
@Table(name="table2")
public class Entity2 {

    private Integer id;

    //Some attributes

    @Column
    private Boolean value;

}
标准生成器代码:

public Query buildSelectQuery(EntityManager em, Criteria c) {
    CriteriaBuilder cb = em.getCriteriaBuilder();

    ConcreteCriteria criteria = (ConcreteCriteria) c;

    CriteriaQuery<Entity1> cq = cb.createQuery(Entity1.class);
    Root<Entity1> entity1root = cq.from(Entity1.class);

    List<Predicate> predicates = buildPredicatesList(cb, entity1root, criteria); //other criteria in Entity1

    if (criteria.isValueIsNull() != null) {
        Root<Entity2> entity2root = cq.from(Entity2.class);
        predicates.add(cb.equal(entity1root.get("entity2ID"), entity2root.get("id")));
        predicates.add((criteria.isValueIsNull() ? cb.isNull(entity2root.get("value")) : cb.isNotNull(entity2root.get("value"))));
    }

    cq.where(predicates.toArray(new Predicate[predicates.size()]));

    return em.createQuery(cq);
}
公共查询buildSelectQuery(EntityManager em,条件c){ CriteriaBuilder cb=em.getCriteriaBuilder(); ConcreteCriteria=(ConcreteCriteria)c; CriteriaQuery cq=cb.createQuery(Entity1.class); Root entity1root=cq.from(Entity1.class); List谓词=buildPredicatesList(cb,entity1root,criteria);//Entity1中的其他条件 if(criteria.isValueIsNull()!=null){ Root entity2root=cq.from(Entity2.class); add(cb.equal(entity1root.get(“entity2ID”)、entity2root.get(“id”)); add((criteria.isValueIsNull()?cb.isNull(entity2root.get(“value”)):cb.isNotNull(entity2root.get(“value”))); } cq.where(predicates.toArray(新谓词[predicates.size()]); 返回em.createQuery(cq); } 验证时条件失败。如何构建CriteriaQuery,而不将
Entity2
以一对一的关系附加到
Entity1

该行有助于映射查询中的对象

cq.select(entity1root);

更恰当的措辞是:当存在多个
from
语句时,有必要使用
select
语句。