使用Spring JPA将SQL查询结果映射到Java对象(在非实体类中)

时间:2018-09-20 16:40:08

标签: java spring spring-boot spring-data-jpa hibernate-jpa

我想将SQL查询结果分配给非实体类中的Java对象。 我的查询正在计算映射到另一个表B的表A中的记录数。

@Query(value="select count(a.id) from table1 a join table2 b on a.id=b.id group by a.id", nativeQuery=true)

非实体类

   public class Sample {

    //assign query result to count variable
    private long count;
   // getters and setters


    }

A和B是实体类,我选择了实体A和B的指定列,并将这些列包括在Sample.class中,并在REST调用中将数据作为JSON发送。

现在我的问题是将计数结果分配给count变量。

预先感谢

1 个答案:

答案 0 :(得分:0)

如何使用“分组依据”到投影(非实体类)中进行JPQL?

方案中有两个表:User和User_Role,并且您想知道系统中有多少个用户具有“公共”角色,有几个用户具有“ admin”角色(如果存在,则还有其他任何角色)。

例如:我想要一个查询,让我知道有两个用户具有“公共”角色,而一个用户具有“管理员”角色。

最简单的例子:

@Query("SELECT ur.roleName, count(u.id) from User u left join u.userRole ur group by ur.roleName")
List<Object[]> getCounts();

在这种情况下,处理结果要比通常所需的要复杂得多。您将不得不遍历对象的列表和数组。

查询投影示例

@Query("SELECT new com.skjenco.hibernateSandbox.bean.GroupResultBean(ur.roleName, count(u.id)) from User u left join u.userRole ur group by ur.roleName")
List<GroupResultBean> getCountsToBean();

这将为您提供一个更好地使用的列表。

代码示例:https://github.com/skjenco/hibernateSandbox/blob/master/src/test/java/com/skjenco/hibernateSandbox/repository/UserProjectionExampleTest.java