当前位置: 首页 > 知识库问答 >
问题:

将结果集映射到非实体Spring数据Jpa

谷德本
2023-03-14

我有一个Spring批处理应用程序,需要从4个表中进行选择。问题是,我无法使用关系,将编写Enricher来选择完整数据。

目前我有几个问题:

  1. 是否可以以简单的方式从JpaRepository映射非实体(POJO)。我看到了@SqlResultSetMap的示例。我正在寻找自动映射(也许是JPA,而不是Spring Data)。我可以用结果精确地制作列名,但它不起作用。
  2. 将POJO标记为实体没问题,但有问题。实体需要@Id。这对我来说是个问题,因为我的丰富数据不适合这个。

也许有人会给我一些建议,哪一个更好用。我的完美目的就是做这样的事情。

@Query(value = "SELECT id as main_id FROM table where name = ?1",
      nativeQuery = true)
  List<Data> getAll(String name);
And get objects mapped to my POJO.

共有1个答案

和谦
2023-03-14

您可以使用JPA构造函数表达式:

示例:

public class CallStatistics {

    private final long count;
    private final long total;
    private final int min;
    private final int max;
    private final double avg;

    public CallStatistics(long count, long total, int min, int max, double avg) {
        this.count = count;
        this.total = total;
        this.min = min;
        this.max = max;
        this.avg = avg;
    }

    //Getters and setters omitted for brevity
}

CallStatistics callStatistics = entityManager.createQuery(
    "select new org.hibernate.userguide.hql.CallStatistics(" +
    "   count(c), " +
    "   sum(c.duration), " +
    "   min(c.duration), " +
    "   max(c.duration), " +
    "   avg(c.duration)" +
    ")  " +
    "from Call c ", CallStatistics.class)
.getSingleResult();

重要部分包括:

  • 必须有一个具有匹配构造函数的类

发件人:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#hql-select子句

 类似资料:
  • 问题内容: 我有一个带有本地查询的Spring Data Repository方法 并且我想将结果映射到Non-Entity POJO 。 是否可以,如果可以,请提供示例吗? 问题答案: 假设在Orid的答案中使用GroupDetails,您是否尝试过JPA 2.1 @ConstructorResult? 并在存储库界面中使用以下命令: 根据springJPA的数据文件,spring将首先尝试找到

  • 并且我希望将结果映射到非实体POJO。 是否可能?如果可能,请提供一个例子?

  • 我有一个复杂的本机查询,我正在尝试将其结果映射到非实体DTO类。我正在尝试使用的with 我的DTO类 我的entity类,它具有我将调用此本机查询结果的存储库接口。 存储库 当我从ItemRepository调用getItemDetails()时,出现以下错误: org.springframework.data.mapping.属性引用异常:没有属性项找到项目类型的详细信息 使用和并解决此问题的

  • 我有一个用户类,有16个属性,比如名字,姓氏,出生日期,用户名,密码等...这些都存储在MySQL数据库中,当我想要检索用户时,我使用ResultSet。我想将每一列映射回用户属性,但我这样做的效率似乎非常低。例如,我正在做: 也就是说,我检索所有的列,然后通过将所有的列值插入用户构造函数来创建用户对象。 有人知道更快、更整洁的方法吗?

  • 我正在浏览Quarkus当前可用的指南 我说的是在不使用现有JPA实体的情况下,将SQL查询结果绑定到自定义pojo的可能性。我找到的所有示例都只从一个表中提取记录,从中提取出相同JPA实体的实例列表。然而,这不太可能是现实世界应用程序的常见用例。大多数情况下,我们必须处理不那么琐碎的查询,这些查询涉及来自不同表的字段的混合、连接或计算字段。 SQL ResultSet映射是一个方便的JPA功能,

  • 我正在尝试使用AutoMapper在LLBLGen实体和DTO之间创建映射。 我的DTO如下所示: ParentEntity包含一个与DTO列表同名的ChildCollection和一个Id(需要忽略其他LLBL字段)。因此,当ParentEntity映射到父d to时,它也应该将ChildCollection映射到一个子列表。 这就是我到目前为止得到的: 这会导致Id被映射,但List的计数为0