我过去几周一直在使用Spring和Hibernate,并且一直在学习新的东西。
现在我有一个问题,我想用Hibernate中的投影来解决它。
假设有一个模型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;
}
这里的问题是,我想要获得每个
Person
的 minYear
(maxYear
),并使它们填写他们拥有的 cars
的最早年份(最新年份)。后来我找到了一个使用
Projections
的解决方案,但我遇到了 org.hibernate.QueryException:could not resolve property: minYear of: model.Person
,这是数据库操作的代码: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。