JPA中的存储过程

时间:2016-02-15 07:01:18

标签: java jpa stored-procedures spring-data-jpa

我在数据库中有一个过程,当我尝试迭代该结果时,它会返回对象列表,我多次只获得一行。它不会在循环中调用下一个记录,

这是我的代码,

Query nativeQuery = entityManager.createNativeQuery("call getdata(?, ?, ?, ?)", Detail.class); 
List<Detail>  paymentAnalysisDetails=nativeQuery.getResultList();
for( Detail Details : paymentAnalysisDetails) {
    System.out.println(Details.getStart_date());
}

我得到输出::

 start_date   end_date   total_no_of_txns 
 2015-01-01  2015-01-30                10 
 2015-01-01  2015-01-30                10 

但在mysql输出中执行相同的过程

start_date  end_date    total_no_of_txns
2015-01-01  2015-01-30  10
2015-02-01  2015-02-30  200

任何人都可以建议我

1 个答案:

答案 0 :(得分:0)

您不需要/必须从'createNativeQuery'方法调用存储过程,因为JPA 2.1现在支持它们。请查看以下代码:

存储产品(MySQL):

DELIMITER $$
  CREATE PROCEDURE sp_getUsers(inputAge INT)
  BEGIN
    SELECT u.* FROM usertable u WHERE u.age >= inputAge;
  END;
$$

JPA致电:

int age = 10;

StoredProcedureQuery query = em.createStoredProcedureQuery("sp_getUsers", Usertable.class)
.registerStoredProcedureParameter("inputAge", Integer.class, ParameterMode.IN)
.setParameter("inputAge", age);

List<Usertable> userList = query.getResultList();