当前位置: 首页 > 面试题库 >

Spring Data JPA将本机查询结果映射到非实体POJO

强硕
2023-03-14
问题内容

我有一个带有本地查询的Spring Data Repository方法

@Query(value = "SELECT g.*, gm.* FROM group g LEFT JOIN group_members gm ON g.group_id = gm.group_id and gm.user_id = :userId WHERE g.group_id = :groupId", nativeQuery = true)
    GroupDetails getGroupDetails(@Param("userId") Integer userId, @Param("groupId") Integer groupId);

并且我想将结果映射到Non-Entity POJO GroupDetails

是否可以,如果可以,请提供示例吗?


问题答案:

假设在Orid的答案中使用GroupDetails,您是否尝试过JPA 2.1
@ConstructorResult?

@SqlResultSetMapping(
    name="groupDetailsMapping",
    classes={
        @ConstructorResult(
            targetClass=GroupDetails.class,
            columns={
                @ColumnResult(name="GROUP_ID"),
                @ColumnResult(name="USER_ID")
            }
        )
    }
)

@NamedNativeQuery(name="getGroupDetails", query="SELECT g.*, gm.* FROM group g LEFT JOIN group_members gm ON g.group_id = gm.group_id and gm.user_id = :userId WHERE g.group_id = :groupId", resultSetMapping="groupDetailsMapping")

并在存储库界面中使用以下命令:

GroupDetails getGroupDetails(@Param("userId") Integer userId, @Param("groupId") Integer groupId);

根据springJPA的数据文件,spring将首先尝试找到一个名为查询匹配你的方法名-
因此使用@NamedNativeQuery@SqlResultSetMapping并且@ConstructorResult你应该能够实现这一行为



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

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

  • 当我直接对我的db运行本机查询时,结果集看起来就像我所期望的那样。 当我从我的JpaRepository运行本机查询时,除了word始终为null之外,所有的东西都在那里工作。我似乎想不出如何将额外的字符串单词结果映射到实体中的一个字段。 有没有办法把这个弄到地图上?还是必须为所有字段创建一个完整的@SQLResultSetMapping(),并与本机查询耦合?(希望不会) 我刚才是在概括。以下是

  • 我有一个Spring批处理应用程序,需要从4个表中进行选择。问题是,我无法使用关系,将编写Enricher来选择完整数据。 目前我有几个问题: 是否可以以简单的方式从JpaRepository映射非实体(POJO)。我看到了的示例。我正在寻找自动映射(也许是JPA,而不是Spring Data)。我可以用结果精确地制作列名,但它不起作用。 将POJO标记为实体没问题,但有问题。实体需要。这对我来说

  • 我尝试使用的将本机SQL查询映射到POJO类,如下所示: 然后,为了在创建本机查询时使用声明的结果集映射,我通过它的名称引用它: 但这对我不起作用,我得到以下错误:

  • 此外,该实体需要一个id,我希望让jpa自动生成它,但我得到的是“Invalid Parameter:Unknown column name id.errorcode=-4460,sqlstate=null” 我的结果集包含4个相同的记录,而不是4个不同的记录,我认为这与我的id字段设置不正确有关 如果你能在这方面提供帮助,我将不胜感激,谢谢。