如果ManagedType#getSingularAttribute(String)
抛出IllegalArgumentException
,我不清楚JPA规范究竟会说什么。确切地说明应该回滚任何现有事务的情况似乎非常谨慎,而这种情况似乎并不在其中。 (这些事态是最常见的EntityManager
操作。)因此,我的默认位置是不应发生事务回滚。这是正确的吗?
(为了完整性,如果 处于JPA规范中列出的某种事务状态,那么仅仅抛出(例如)a {{1标记回滚事务的是什么。捕获并忽略它不会让你摆脱困境。)
所以我们在家免费,对吧?
虽然可能不是那么快。和大多数人一样,我在无状态会话bean中使用JPA。
EJB 3.1规范的表16说明(解释和释义)如果业务方法遇到系统异常,则事务回滚。它表明这发生在容器RuntimeException
时间(即,只有当容器看到系统异常时才暗示,但没有明确说明,如果你事先抓住它并处理它就好像没有发生任何事情。将此与JPA规范中的“catch
”时间回滚进行对比。
因此,如果我在(EJB 3.1)无状态会话bean中,在JTA事务中,我这样做:
throws
...我的JTA交易是否仍然可以提交?或者是否需要在boolean attributeExists = true;
try {
jpaManagedType.getSingularAttribute(attributeName, attributeJavaType);
} catch (final IllegalArgumentException noSuchAttribute) {
attributeExists = false;
}
“IllegalArgumentException
”时间回滚?
答案 0 :(得分:0)
JTA交易将是可提交的。 Container仅为EJB方法查找RuntimeExeption - 使用tx拦截器