2012-04-25 56 views
1

注意:这个问题与我的previous one有关。如何使用线程上下文重新初始化Hibernate中的会话?

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

这一切都很棒,但是当我得到一个HibernateException,一个ConstraintViolationException例如做什么?然后,我之前获得的当前会话变得无效,我无法再使用它,甚至没有读出更多的数据(根据我读过的许多论坛)。我该如何放弃并在特定范围内获得新的会话?我想第二次打电话SessionFactory.getCurrentSession()还是会返回我一样的无效会话!?

回答

0

对于ThreadLocalSessionContext,会话将在事务结束时关闭。所以在这种情况下,您应该拨打tx.rollback(),然后sessionFactory.getCurrentSession()重新开始。