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); }