在过去的几周里,我一直在使用 spring 和 hibernate,并且我一直在那里学习新的东西。
现在我有一个问题,我想用 Hibernate 中的 Projections 来解决。
假设有一个模型Person
并且该模型有很多Car
. 以下是类定义的大致样子:
public class Person implements java.io.Serializable {
private Integer id;
private String name;
private List<Car> cars;
private Integer minYear; // Transient
private Integer maxYear; // Transient
}
public class Car implements java.io.Serializable {
private Integer id;
private Integer year;
}
这里的问题是我想让每个人的minYear
( )由他们拥有的最早一年(最近一年)填充。maxYear
Person
cars
后来我找到了一个可以使用的解决方案,Projections
但我偶然发现了org.hibernate.QueryException: could not resolve property: minYear of: model.Person
这里是 db 操作的代码:
Criteria criteria = sessionFactory.getCurrentSession().createCriteria("model.Person");
criteria.add(create(personInstance));
criteria.createAlias("minYear", "minYear");
criteria.setProjection(Projections.min("cars.year").as("minYear"));
无论如何要使用瞬态方法存储聚合值,Projections
因为我只想尽可能避免使用普通的 SQL 和 HQL。