注意:此问题与我的previous one相关。
我在Hibernate配置中使用hibernate.current_session_context_class=thread
,并根据需要通过SessionFactory.getCurrentSession()
获取Hibernate会话。所以它确实在需要时创建或给我现有的会话,所以我不会照顾这个。
这一切都很棒,但是如果我得到HibernateException
,例如ConstraintViolationException
该怎么办?然后我之前获得的当前会话变得无效,我不能再使用它,甚至不读取更多数据(根据我读过的很多论坛)。如何在特定范围内丢弃并获得新会话?我认为第二次打电话给SessionFactory.getCurrentSession()
仍然会给我带来同样的无效会话!?
答案 0 :(得分:0)
对于ThreadLocalSessionContext
,会话将在交易完成时关闭。因此,在这种情况下,您应该调用tx.rollback()
,然后sessionFactory.getCurrentSession()
重新开始。