spring数据jpa-repository返回不同的类型

nwsw7zdq  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(332)

我有一个 CrudRepository 这样地:

public interface TestTableRepository extends CrudRepository<TestTable, Long> {

    @Query(
            value = "select count(case when field1 = true then 1 end) as field1Count, count(case when field2 = true then 1 end) as field2Count from test_table",
            nativeQuery = true
    )
    List<Integer> selectRowCount();

}

这是我的应用程序中类似查询的简化版本。什么是最好的回报类型使用?
正如当前编写的,实际返回的类型是 List<Object[]> 而不是 List<Integer> . 这怎么可能?我猜这与spring/hibernate在运行时构建的查询实现有关。

w1e3prcc

w1e3prcc1#


**The best return type in this case is `Map<String, Object>`.<br/>

To retrieve data from Map you can used alias name. In this case, key field1Count and field2Count will give you count value.**  

For Example
@RestController class :
            @GetMapping("/getCount")
                public String getCounnt() {
                    Map<String, Object> mp =  userRepo.getCount();
                    int field1CountValue = Integer.parseInt(mp.get("field1Count").toString());
                    int field2CountValue = Integer.parseInt(mp.get("field2Count").toString());  
                    System.out.println("field1CountValue :"+field1CountValue+" field2CountValue :"+field2CountValue);
                    return "field1CountValue :"+field1CountValue+" field2CountValue :"+field2CountValue;
                }
    ___________________________________
@Repository Interface
            import java.util.Map;
            import org.springframework.data.jpa.repository.Query;
            import org.springframework.data.repository.CrudRepository;

            public interface UserRepo extends CrudRepository<User, Long>{

                @Query(
                        value = "select count(case when id > 0 then 1 end) as field1Count, "
                                + "count(case when id > 15 then 1 end) as field2Count from user",
                        nativeQuery = true
                )
                Map<String, Object> getCount(); 
            }
Console :
[Hibernate: select count(case when id > 0 then 1 end) as field1Count, count(case when id > 15 then 1 end) as field2Count from user
field1CountValue :9 field2CountValue :0]

相关问题