【发布时间】:2016-09-28 02:37:29
【问题描述】:
我遇到过使用按功能排序的 JPA(提供程序:EclipseLink)的奇怪行为。我有 TransactionData 类,它引用了 CustomerData 类:
@Entity
public class TransactionData {
//...
@ManyToOne
@JoinColumn(name = "CUSTOMER_ID")
private CustomerData customer;
//...
}
@Entity
public class CustomerData {
//...
@Column(name = "LAST_NAME")
private String lastName;
//...
}
在我的项目中,有一些特定的情况,其中有交易,没有分配给任何客户(称为非客户交易)。
我尝试获取所有已注册交易(包括客户交易和非客户交易)的列表,并按客户的姓氏对它们进行排序。为了实现这一点,我按照 Criteria Api 编写了
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<TransactionData> criteriaQuery = criteriaBuilder.createQuery(TransactionData.class);
Root<TransactionData> from = criteriaQuery.from(TransactionData.class);
criteriaQuery.orderBy(criteriaBuilder.asc(from.get("customer").get("lastName"));
TypedQuery<TransactionData> query = entityManager.createQuery(criteriaQuery);
return query.getResultList();
我想我应该得到所有交易的列表,当然,还有那些客户字段设置为 NULL 值的交易。但是 JPA 的行为不同,因为它切断了所有对客户的引用为空的交易。
【问题讨论】:
-
如果您考虑需要生成什么 SQL,type of 是有意义的。
标签: java jpa criteria-api