如何使用 JpaRepository 从 xml 中的命名本机查询返回 Map 作为结果

Posted

技术标签:

【中文标题】如何使用 JpaRepository 从 xml 中的命名本机查询返回 Map 作为结果【英文标题】:How to return Map as result from named nativ query in xml using JpaRepository 【发布时间】:2017-10-19 13:18:44 【问题描述】:

我需要每天查询一些计数,并且我想创建将在地图中返回的命名本机查询。我该怎么做?

<named-native-query name="getLeadNumberByDayInDateRange" result-set-mapping="map">
            <query>
                SELECT addeddate, 
                       Count(DISTINCT campaignid, email) AS count 
                FROM   leads 
                GROUP  BY addeddate   
            </query>
        </named-native-query>

所以我正在用 xml 编写查询,我想将它添加到 JpaRepository 中:

@Query
public Map<LocalDateTime, Integer> getLeadNumberByDayInDateRange();

【问题讨论】:

【参考方案1】:

要使用命名查询来做到这一点,可以执行以下操作:

@Query("SELECT l.addeddate, Count(DISTINCT l.campaignid)
        FROM leads l 
        GROUP BY l.addeddate")
public Map<LocalDateTime, Integer> getLeadNumberByDayInDateRange();

或类似:

@NamedQuery(name = "getLeadNumberByDayInDateRange", 
query = "SELECT l.addeddate, Count(DISTINCT l.campaignid)
         FROM leads l 
         GROUP BY l.addeddate")
public Map<LocalDateTime, Integer> getLeadNumberByDayInDateRange();

或者如果你想要一些自定义映射,你可以使用[sql 结果集映射]。1

【讨论】:

当我尝试这个时,我得到: 原因:org.hibernate.hql.internal.ast.QuerySyntaxException: 期待关闭,在第 1 行第 48 列附近找到 ',' [SELECT l. addeddate, Count (DISTINCT l.campaignid,l.email)作为计数来自潜在客户 l GROUP BY l. addeddate]。你能帮我在 xml 中做到这一点吗? 嗯,我需要这 2 个值的唯一组合,所以我必须给它 2 个参数

以上是关于如何使用 JpaRepository 从 xml 中的命名本机查询返回 Map 作为结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 jparepository 从 getmapping 返回布尔结果

接口测试中使用JpaRepository做数据库层校验

我应该如何将 JpaRepository.findOne() 与 SpringBoot 一起使用?

如何使用 JpaRepository 和嵌套的对象列表进行搜索?

JpaRepository 中的 delete 方法从 DB 表中删除所有行

如何将 FindAllBy 与 JpaRepository 中的多个字段一起使用?