我修改了现有的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如何处理带有计数的查询存在问题或细微差别,但我没有看到这样的引用。 非常感谢您在澄清此问题时提供的任何帮助。
安东尼
答案 0 :(得分:0)
当您进行“分组依据”时,这是预期的行为。它不会映射到特定实体。这种方法可行的唯一方法是,如果您的数据库中有一个通过send_method汇总数据的视图,您可以将实体映射到该视图。