【问题标题】:Stored procedure in JPAJPA 中的存储过程
【发布时间】:2016-02-15 07:01:18
【问题描述】:

我在数据库中有一个过程,当我尝试迭代该结果时,它返回对象列表,我多次只得到一行。它没有指向循环中的下一条记录,

这是我的代码,

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

谁能推荐我

【问题讨论】:

  • JPA 2.1 具有用于存储过程执行的专用 API,因此您无需破解“本机查询”方法。也许你应该尝试一下
  • 任意调用jpa存储过程的示例代码
  • 你为什么不直接使用互联网搜索 JPA2.1 文档?
  • 我推荐这篇关于从 JPA 2.1 调用存储过程的博文:thoughts-on-java.org/call-stored-procedures-jpa

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


【解决方案1】:

您不需要/必须从“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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多