簡體   English   中英

SessionFactory.openSession()和SessionFactory.getCurrentTransaction()。commit()之間的區別

[英]Difference between SessionFactory.openSession() & SessionFactory.getCurrentTransaction().commit()

如果我在方法結束時使用Session.getCurrentTransaction().commit()關閉會話或使用session.close()關閉會話會怎樣?

public static void deleteYear(Years year)
{
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.delete(year);
            // what is the best way to close session
    session.getTransaction().commit();
            //or : session.close(); ???
}

ASAIK,這兩個是完全不同的操作。

sessionFactory.openSession() :它打開一個會話

session.beginTransaction() :它開始一個事務 ,事務是一個原子工作單元,應該完全成功或失敗。

session.getTransaction().commit() :提交事務,這意味着在beginTransaction和此調用之間發生的所有事情都將持久化到數據庫中。 如果您不提交事務,則該事務中發生的所有更改都將丟失。 提交事務將無法關閉會話

session.close() :關閉會話並釋放獲取的資源。

這意味着您需要同時調用commit()session.close()

public static void deleteYear(Years year)
{
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.delete(year);
    session.getTransaction().commit();
    session.close();
}

進行會話交易的更好方法

Session sess=getSession();
Transcration tx=sess.beginTranscration();
//do something with session
sess.save(obj);
tx.commit();
sess.close;

我建議這樣做

這完全是兩件事。

到目前為止, COMMIT進行了transaction內已進行的更改。
CLOSE關閉會話,並且您不再有權訪問該會話。

所以你們可以在一起。

需要記住的注意事項 :無需關閉會話; 但是,會話應在最后DISCONNECT

暫無
暫無

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

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