【发布时间】:2014-08-11 12:55:40
【问题描述】:
我有 2 张桌子:SaveBatchLocal 和 Queue。另外,我有一个程序SaveLocal。 SaveLocal 将行从 SaveBatchLocal 删除到 Queue。但我必须说,SaveBatchLocal 是全局临时表。
如果我将新行添加到 SaveBatchLocal,然后使用 Oracle SQL Developer 调用 Save,行会正确显示在 Queue 中,但不会在我的 Spring 应用程序中出现。据我所知,临时数据在一个会话上下文中是可见的。那么,我该如何修改我的代码呢? sessionFactory 是否每次都创建新会话?
这是我的代码:
public void add(LinkedList<SmsEntity> smsEntityList) {
try {
Session session = null;
session = this.sessionFactory.getCurrentSession();
Iterator<SmsEntity> iterator = smsEntityList.iterator();
while (iterator.hasNext()) {
session.save(iterator.next());
}
save(session);
} catch (Exception e) {
e.printStackTrace();
}
}
public void save(Session session) {
Query query = session.createSQLQuery("{CALL DBManager.SaveLocal}");
query.executeUpdate();
}
如果我将表更改为非临时表,则效果很好。
【问题讨论】:
-
队列是否也临时保存数据?
-
当您使用 sessionFactory.getCurrentSession() 时,您获得的会话的范围是线程,因此只要线程处于活动状态,您就会获得相同的会话。
-
在调用过程之前做一个 session.flush(),你也在你的 spring 应用程序中使用@Transactional 吗?
-
@user3487063,非常感谢。顺便说一句,我每次都必须刷新会话吗?
-
在调用过程之前应该没问题,比如 session.flush();保存(会话);
标签: java spring oracle hibernate