【发布时间】: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