我有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();
}
如果我将表更改为非临时表,则效果很好。
最佳答案
以下代码可以帮助您
public void add(LinkedList<SmsEntity> smsEntityList) {
try {
Session session = null;
Transaction tx=session.beginTransaction();
session = this.sessionFactory.getCurrentSession();
Iterator<SmsEntity> iterator = smsEntityList.iterator();
while (iterator.hasNext()) {
session.save(iterator.next());
tx.commit();
}
save(session);
} catch (Exception e) {
e.printStackTrace();
}
}
public void save(Session session) {
Query query = session.createSQLQuery("{CALL DBManager.SaveLocal}");
query.executeUpdate();
}
您需要做的就是将更改提交到数据库的事务。
希望能帮助到你。