Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Query标记中的嵌套SQL工作不正常_Java_Sql_Hibernate_Spring Data Jpa_Jpql - Fatal编程技术网

Java @Query标记中的嵌套SQL工作不正常

Java @Query标记中的嵌套SQL工作不正常,java,sql,hibernate,spring-data-jpa,jpql,Java,Sql,Hibernate,Spring Data Jpa,Jpql,假设我有一个表,其中包含user和type的所有帐户。 我想创建一个Jpa存储库方法,它返回一个数组,其中包含每种类型的用户user、ADMIN、MASTER的总数 以下是我在JpaRepository中的做法: @Query(value="SELECT (SELECT COUNT(*) FROM account WHERE account_role='USER')," + "(SELECT COUNT(*) FROM account WHER

假设我有一个表,其中包含user和type的所有帐户。 我想创建一个Jpa存储库方法,它返回一个数组,其中包含每种类型的用户user、ADMIN、MASTER的总数

以下是我在JpaRepository中的做法:

@Query(value="SELECT   (SELECT COUNT(*) FROM account WHERE account_role='USER'),"
                        + "(SELECT COUNT(*) FROM account WHERE account_role='ADMIN'),"
                        + "(SELECT COUNT(*) FROM account WHERE account_role='MASTER')"
                        + "FROM account LIMIT 1",
            nativeQuery=true)
public List<Integer> getTotalAccountType();
代码执行得很好,但结果不是我所期望的

结果: [2]

预期结果:[2,10,30]

知道如何将嵌套SQL与JPQL结合使用吗?提前谢谢你

尝试返回对象[],而不是列表。我认为returning List将指示返回多行整数值,而返回一行多个Intger列

从结果对象[]中,您将拉出指示行的第一个值。这应该是另一个对象[],它将按返回顺序返回您的值

您还可以从帐户限制1行中删除最后一行,因为它与结果无关

我建议将所有这些都投射到一个对象上。如图所示-

如果repository方法返回整数列表,则表示查询结果行包含一个整数值。但您希望得到一行中的整数序列

您可以通过不同的方式获得相同的结果:

@Query(value="SELECT COUNT(*) FROM account WHERE account_role=?", nativeQuery=true)
public Integer getTotalAccountType(String role);
然后:

Integer userCount = repository.getTotalAccountType("USER");
Integer adminCount = repository.getTotalAccountType("ADMIN");
Integer masterCount = repository.getTotalAccountType("MASTER");
或者,如果您已映射实体:

使用构造函数PairK key、V值创建Pair类或从任何 基于hql查询的存储库方法

@Queryvalue=按a.accountRole从帐户a组中选择新的javafx.util.Paira.accountRole、counta 公共列表getRoleCountList

将存储库结果转换为服务中的映射

javafx.util.Pair result=repository.getRoleCountList; Map Map=result.stream.collectCollectors.toMapr->r.getKey,r->r.getValue


旁注-可能更好的查询:选择account_role,COUNT*FROM account WHERE account_role,在“用户”、“管理员”、“主”组中按account_role进行查询,尽管您需要从方法中返回不同的类型