新起的线程需要绑定Hibernate session,才能在新线程中使用事务和延迟加载等功能,否则会曝出no session异常;
解决办法:
new Runnable() {
@Override
public void run() {
// ----------绑定session到当前线程------------
SessionFactory sessionFactory = (SessionFactory)applicationContext.getBean("sessionFactory");
boolean participate = ConcurrentUtil.bindHibernateSessionToThread(sessionFactory);
// ---------你的业务---------------
<pre name="code" class="java">// ----------关闭session------------
ConcurrentUtil.closeHibernateSessionFromThread(participate, sessionFactory);
}
}
bindHibernateSessionToThread方法:
public static boolean bindHibernateSessionToThread(SessionFactory sessionFactory) {
if (Transac

在服务端新开的线程中,为确保能够使用Hibernate的事务和延迟加载,需要将session绑定到线程。当遇到'No session'异常时,可以采取在事务边界使用AOP或@Transactional注解的方式来控制。此解决方案借鉴了Spring的OpenSessionInViewFilter,保证事务性方法能获取到当前线程的session。
最低0.47元/天 解锁文章
3413

被折叠的 条评论
为什么被折叠?



