【问题标题】:Stored procedure doesn't preserve the table written, when called from Java app从 Java 应用程序调用时,存储过程不保留写入的表
【发布时间】:2014-05-14 21:33:39
【问题描述】:

我正在为我遇到的一个小问题寻找答案。我认为有一个我不知道的理论概念。请帮忙:

我有从各种表和视图收集数据的存储过程。 'sp_getData()'

在不同的点上,它通过 INSERT 或 UPDATE 将中间结果写入“table_A”。 在存储过程结束时, 它通过简单的选择输出在“tbl_A”中收集的数据

select field1, field2, ..etc...
from tbl_A
where <someCondition is met>

tbl_A 是静态的,应该在存储过程结束后将数据保留在其中。

如果我从 SQLServer 查询分析器运行这个存储过程 - 一切都很好,表仍然存在。但是,如果我使用 Hibernate 从 Java 应用程序调用存储过程,则 tbl_A 为空。但是,我确实在 Java 应用程序中设置了结果。

这是Java代码部分:

  private void execute(Session session, int port) throws MyCustomSystemException{
     String queryString = "{ call sp_getData(?) }";
    Query q;
    List resultList;
    try {
        q = session.createSQLQuery(queryString);
        q.setInteger(0, port);
        resultList = q.list();
    } 
    catch (HibernateException hex) {
         throw new MyCustomSystemException(
                "STYSTEM ERROR:  Can't execute    
                      sp_getData(?) procedure.",
                hex);
    }

    if (isSummaryReport())
        merge(resultList);
            System.out.println("==============") ;
    if (isFullReport())
        merge2(resultList);
   }

我使用的是 Hibernate 版本:3.1.3

merge() 和 merge2() 是处理返回数据的方法。不包含与数据库相关的/休眠代码。

谁能帮忙??? 谢谢。

【问题讨论】:

  • 当您通过查询分析器运行它时,您是否将自动提交打开,但在您通过 Java 程序运行它时关闭?只是猜测。
  • 大卫,非常感谢您的提示。就是这样。显然一个项目中有两个hibernate.cfg.xml,实际上只有一个是活跃的。我不熟悉项目结构,但是一旦我找到了正确的配置文件,我就将自动提交设置为 true,并且它起作用了。非常感谢

标签: java sql sql-server hibernate stored-procedures


【解决方案1】:

尝试切换 调用 sp_getdata(?) 到 执行 sp_getdata()

Difference Between call and exec in SQL

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 2021-02-11
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多