如何使用线程上下文在Hibernate中重新初始化会话?

时间:2012-04-25 20:20:44

标签: multithreading hibernate session session-management

注意:此问题与我的previous one相关。

我在Hibernate配置中使用hibernate.current_session_context_class=thread,并根据需要通过SessionFactory.getCurrentSession()获取Hibernate会话。所以它确实在需要时创建或给我现有的会话,所以我不会照顾这个。

这一切都很棒,但是如果我得到HibernateException,例如ConstraintViolationException该怎么办?然后我之前获得的当前会话变得无效,我不能再使用它,甚至不读取更多数据(根据我读过的很多论坛)。如何在特定范围内丢弃并获得新会话?我认为第二次打电话给SessionFactory.getCurrentSession()仍然会给我带来同样的无效会话!?

1 个答案:

答案 0 :(得分:0)

对于ThreadLocalSessionContext,会话将在交易完成时关闭。因此,在这种情况下,您应该调用tx.rollback(),然后sessionFactory.getCurrentSession()重新开始。