Java JPA标准Api-不在关系实体查询中
我在构建CriteriaQuery时遇到问题,无法检查此关系中的未映射实体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
@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
语句。