Spring Data JPA将本地查询结果映射到非实体POJO [英] Spring Data JPA map the native query result to Non-Entity POJO

查看:1227
本文介绍了Spring Data JPA将本地查询结果映射到非实体POJO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用本地查询的Spring Data存储库方法

  @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);

我想将结果映射到非实体POJO GroupDetails 。



是否有可能,如果是这样,您能否提供一个例子?

html $> @ 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,resul tSetMapping =groupDetailsMapping)

并在存储库界面中使用以下内容:

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

根据Spring Data JPA 文档,spring将首先尝试查找与您的方法名称匹配的命名查询 - 所以通过使用 @NamedNativeQuery @SqlResultSetMapping @ConstructorResult 你应该能够实现那种行为

I have a Spring Data repository method with a native query

@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);

and I'd like to map the result to Non-Entity POJO GroupDetails.

Is it possible and if so, could you please provide an example ?

解决方案

Assuming GroupDetails as in orid's answer have you tried 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")

and use following in repository interface:

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

According to Spring Data JPA documentation, spring will first try to find named query matching your method name - so by using @NamedNativeQuery, @SqlResultSetMapping and @ConstructorResult you should be able to achieve that behaviour

这篇关于Spring Data JPA将本地查询结果映射到非实体POJO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆