SimpleJpaRepository计数查询

时间:2014-07-31 20:56:44

标签: spring jpa repository

我修改了现有的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如何处理带有计数的查询存在问题或细微差别,但我没有看到这样的引用。 非常感谢您在澄清此问题时提供的任何帮助。

安东尼

1 个答案:

答案 0 :(得分:0)

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