0
基于服务(收藏单位)条件services.get为什么条件查询不过滤的记录(“状态”),“待定”)如下?JPA标准筛选集合
CriteriaQuery<Customer> query = cb.createQuery(Customer.class);
Root<Customer> customer = query.from(Customer.class);
Join<Customer, Service> services = customer.join("services", JoinType.INNER);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(cb.equal(customer.get("customerId"), 1));
predicates.add(cb.equal(services.get("status"), "pending"));
query.select(customer).distinct(true)
.where(predicates.toArray(new Predicate[]{}));
List<Customer> customers = em.createQuery(query).getResultList();
,其中作为SQL的功能筛选记录正确
select * from customers c
INNER JOIN SERVICES s on s.COID = c.COID
where c.ID=1 and
s.status='pending';
记录是在结果集基于状态条件(收集)没有资格,其实,返回了客户的所有服务。
我试图用fetch连接(因为有客户和2该客户的服务执行的第一个2个查询,认为状态可能会在第二次查询中未评估)使用
customer.fetch("services", JoinType.INNER);
,但没有运气。
我很惊讶这种行为。我正在使用OpenJPA JPA供应商
实体为客户和服务。
public class Customer{
@Id
@Column(name = "ID")
private Integer customerId;
@OneToMany
@MappedBy(name = "customer")
private List<Service> services;
}
public class Service {
@EmbeddedId
private ServicesPK servicePK;
@ManyToOne
@JoinColumn(name = "COID")
private Customer customer;
}
@Embeddable
@EqualsAndHashCode
public class ServicesPK implements Serializable {
@Column(name = "COID")
private Integer coId;
@Column(name = "VERSION")
private Integer version;
}
@wypieprz能否请你看看这个问题呢?谢谢 –