我有两张桌子: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();
}
如果我将我的表格更改为非临时表格,则效果很好。
答案 0 :(得分:0)
以下代码可以帮助您
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();
}
您只需要将更改提交到数据库的事务。
希望它有所帮助。
答案 1 :(得分:0)
正如@ user3487063所说:
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());
}
session.flush();
save(session);
} catch (Exception e) {
e.printStackTrace();
}
}
我应该在save()