建立非同步執行緒時,Hibernate報No Session異常
阿新 • • 發佈:2019-01-08
SessionFactory的getCurrentSession並不能保證在沒有當前Session的情況下會自動建立一個新的,Session是和執行緒相關聯的,當另起一個新的非同步執行緒時getCurrentSession會找不到當前的Session,所以需要手動建立Session並開啟事務進行提交。
注意:
1、使用openSession開啟一個新的Session而不是獲取當前Session
2、使用Session開啟事務(session.begainTransaction()),而不是transaction.begin()然後TransactionSynchronizationManager.bindResource(this.sessionFactory, session)繫結進行事務管理最後transaction.commit();
程式碼如下:
try { Session session = sessionFactory.openSession(); session.beginTransaction(); //TODO 要做的事。。。。 。 。 。 session.getTransaction().commit(); if (session != null) { session.close(); } }catch (Exception e){ log.error("儲存異常",e); }