从ManagedType#getSingularAttribute(String)抛出的异常会回滚事务吗?从SLSB里面怎么办?

时间:2013-11-21 03:43:24

标签: jpa ejb-3.1

如果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”时间回滚?

1 个答案:

答案 0 :(得分:0)

JTA交易将是可提交的。 Container仅为EJB方法查找RuntimeExeption - 使用tx拦截器