gpt4 book ai didi

java - 将 hibernate 投影结果映射到 Java POJO 模型

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:09 24 4
gpt4 key购买 nike

过去几周我一直在使用 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;
}

这里的问题是我想得到每个 PersonminYear (maxYear) 最早的年份(最近的一年) ) 他们拥有的汽车

后来我找到了使用 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 将聚合值存储在 transient 方法中的方法,因为我只想尽可能避免使用纯 SQL 和 HQL。

最佳答案

没关系,我找到了解决方案。

  1. 首先我们需要像这样创建关联对象的别名

    Criteria criteria = sessionFactory.getCurrentSession().createCriteria("model.Person");
    criteria.createAlias("cars", "cars");
  2. 使用 Hibernate Projections 选择需要的

    ProjectionList projections = Projections.projectionList();
    projections.add(Projections.property("id").as("id"));
    projections.add(Projections.property("name").as("name"));
    projections.add(Projections.property("cars").as("cars"));
  3. 根据根实体对结果进行分组(在本例中使用其 id,Person.id),这在与聚合一起使用以对聚合进行分组时尤为必要

    projections.add(Projections.groupProperty("id"));
  4. 使用聚合函数

    projections.add(Projections.min("cars.year").as("minYear"));
    projections.add(Projections.max("cars.year").as("maxYear"));
  5. 设置投影

    criteria.setProjection(projections);
  6. 使用结果转换器 AliasToBeanResultTransformer 将结果字段(如步骤 2 和 4 中指定的)映射到 POJO

    criteria.setResultTransformer(new AliasToBeanResultTransformer(Person.class));
  7. 得到结果

    List<Person> results = (List<Person>) criteria.list();

关于java - 将 hibernate 投影结果映射到 Java POJO 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com