簡體   English   中英

Hibernate中的會話管理(全局臨時表)

[英]Session management in Hibernate (global temporary tables)

我有2個表: SaveBatchLocalQueue 另外,我有一個程序SaveLocal SaveLocal去除行SaveBatchLocalQueue 但是我必須說, 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();          

}

您需要做的就是將更改提交到數據庫的事務。

希望能幫助到你。

正如@ 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()之前沖洗會話

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM