我在以下列方式保存数据时进行异常检查:
try {
session.beginTransaction();
session.update(person);
session.getTransaction().commit();
}
catch(Exception e) {
session.getTransaction().rollback();
log.error("Error saving person to database", e);
}
尽管如此,我的应用程序在稍后的某个地方以异常终止。
(我做了这个检查是为了避免数据截断错误。可能有办法检查数据截断而不会在Hibernate中导致异常吗?)
答案 0 :(得分:1)
当抛出Hibernate异常时,您不能再使用会导致异常的会话。回滚是自动完成的。
如果您想在异常后继续,您有两种可能性:
丢弃旧会话并创建一个新会话。
使用StatelessSession而不是会话。可以在异常后使用StatelessSession。在StatelessSession中,您必须手动执行回滚。
通常你会做解决方案1.
解决方案2.如果您故意挑起异常并且有特殊的方式对其做出反应,那么它非常有用。 (例如,插入操作中的索引违例异常,并且在异常之后执行更新而不是插入。)