【发布时间】:2015-05-05 08:50:39
【问题描述】:
简单的问题。这是代码:
public void insertDefacer(Defacer defacer) {
try {
em.persist(defacer);
} catch (PersistenceException | DatabaseException e) {
defacer = em.find(Defacer.class, defacer.getIdentity());
defacer.setStats(defacer.getStats() + 1);
em.merge(defacer);
}
}
当 defacer 已存在于数据库 (mysql) 中时,persist 操作会引发异常(PersistenceException 和/或 DatabaseException)。看起来很正常。所以我想捕捉这些异常并威胁它们。但是在记录这些异常之后,我的程序突然结束(没有完成该方法)。
为什么?
详细信息(可能重要或不重要):em 是 EntityManager 通过 @PersistenceContext
【问题讨论】:
-
你从哪里调用完成方法?
-
我希望我的捕获运行。但事实并非如此。
-
我怀疑另一个
Exception正在您的catch块内发生。通常,您的程序应该继续运行,因此您的EntityManager可能会发生一些事情来防止这种情况发生。 -
哦,好的,捕获它没有被执行,同意@TimBiegeleisen。
-
等待 2 分钟,伙计们,我测试@TimBiegeleisen 的解决方案。看起来不错。