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