【问题标题】:SimpleJpaRepository Count QuerySimpleJpaRepository 计数查询
【发布时间】:2014-07-31 20:56:43
【问题描述】:

我已经修改了一个现有的 RESTful/JDBC 应用程序,我必须使用 Spring 4 中的新功能......特别是 JpaRepository。它将:

1) 检索指定日期的交易列表。这很好用

2) 按类型检索指定日期的交易计数。这没有按预期工作。 查询的设置类似,但实际的返回类型非常不同。 我有每个查询的 POJO

我的交易 JPA 存储库如下所示:

public interface MyTransactionsRepository extends JpaRepository<MyTransactions, Long> 
//My query works like a charm.

@Query( value = "SELECT * from ACTIVITI_TMP.BATCH_TABLE WHERE TO_CHAR(last_action, 'YYYY-MM-DD') = ?1", nativeQuery = true )
List< MyTransactions > findAllBy_ToChar_LastAction( String lastActionDateString );

这会按预期返回 MyTransactions 对象的列表。调试,我看到返回的对象为 ArrayList。查看 elementData 内部,我看到每个对象正如预期的那样是一个 MyTransactions 对象。

我的第二个存储库/查询是我遇到问题的地方。

public interface MyCountsRepository extends JpaRepository<MyCounts, Long> 
    @Query( value = "SELECT send_method, COUNT(*) AS counter FROM ACTIVITI_TMP.BATCH_TABLE WHERE TO_CHAR(last_action, 'YYYY-MM-DD') = ?1 GROUP BY send_method ORDER BY send_method", nativeQuery = true )
    List<MyCounts> countBy_ToChar_LastAction( String lastActionDateString );

这不会按预期返回列表。

保存返回数据的对象最初定义为 List,但是当我在 Eclipse 中检查此对象时,我发现它保存的是 ArrayList。深入到 elementData,每个对象实际上都是一个 Object[2]...而不是 MyCounts 对象。

我已将 MyCountsRepository 查询修改如下

ArrayList<Object[]> countBy_ToChar_LastAction( String lastActionDateString );

然后,在我的控制器类中,我为 List 中的每个元素创建一个 MyCounts 对象,然后返回 List 这行得通,但是...我不明白为什么我必须经历这一切? 我可以像查询表格一样轻松地查询视图。 为什么 JPA/Hibernate 不将其视为简单的 2 列表? send_method varchar(x) 和 count(int 或 long) 我知道 JPA 如何处理带有计数的查询存在问题或细微差别,但我没有看到类似的引用。 非常感谢您在澄清此问题时提供的任何帮助。

安东尼

【问题讨论】:

    标签: spring jpa repository


    【解决方案1】:

    这是您进行“分组依据”时的预期行为。它不会映射到特定实体。唯一可行的方法是,如果您的数据库中有一个按 send_method 汇总数据的视图,并且您可以将实体映射到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 2021-03-23
      • 2015-12-05
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多