我有2个表:SaveBatchLocalQueue。另外,我有一个过程SaveLocalSaveLocal将行从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();

}


您需要做的就是将更改提交到数据库的事务。

希望能帮助到你。

08-26 07:28