我使用Hibernate跨越多个Web请求的长会话(对话),其中全局拦截器管理打开和关闭Hibernate会话。如果会话与HibernateException
(例如ConstraintViolationException
)崩溃,则会cannot be used any more,因为存在不可预测行为的危险。因此必须关闭并丢弃会话,并打开一个新会话。但是在我的设计中,会话管理(Web请求拦截器)和数据访问代码位于不同的层,因此拦截器在请求结束时无法知道中间是否发生了HibernateException
。我需要一些方法来测试会话是否仍然有效以及是否可以继续使用。使用session.isOpen()
无济于事:即使返回true
,会话中的其他调用方法也可能导致另一次崩溃。
有没有可靠的方法呢?谢谢!