【发布时间】:2016-03-02 14:22:52
【问题描述】:
也许这个问题有点不寻常,我只是不明白标准是如何工作的(很确定,因为我刚开始学习它)但现在我对以下问题有点困惑:
我实现了一个过滤器功能,它应该可以按特定标准填充一组记录。所以我们假设有以下实体:
@Entity
public class Car {
@OneToMany
private List<Deal> deals;
}
@Entity
public class Deal {
private Customer customer;
private DateTime dealDate;
}
现在我必须按第一个客户名称过滤汽车记录。所以理论上它看起来像:
private static List<Predicate> buildPredicates(Root root, CriteriaQuery query,
CriteriaBuilder builder, CarFilter filter) {
List<Predicate> predicates = new ArrayList<>();
...
predicates.add(
builder.like(
root.get(Car_.deals.sortByDealDateComparator().first().customer.name),
filter.getFirstCustomerName()));
...
return predicates;
}
我认为应该首先加入交易,然后可能通过子查询或其他方式以某种方式排序。但是,如何仅使用 CriteriaQuery 获得比较的第一个结果也会很有趣。
我想我的方法不对,所以欢迎任何建议。
【问题讨论】:
-
非常混乱的问题。当您尝试按名字获取时,为什么要关心对交易进行排序?你得到什么结果?你期待什么?
-
我同意这可能会造成混淆。因此,让我们假设交易未按任何标准在列表中排序。我基本上想从最早日期的交易中获取客户的姓名。
标签: hibernate spring-data-jpa criteria criteria-api