4

我有一个@Stateless带有@WebService接口的 EJB,使用容器管理的事务,这意味着事务在调用方法后由容器自动提交,如果它不引发系统异常。

如果我尝试对EntityManager.persist(...)具有唯一约束的列使用具有相同值的两个对象,则容器将PersistenceException在我的代码之外提交时向客户端抛出一个。我如何捕捉这个异常,以便我可以重新抛出我自己的应用程序异常?

我是否必须在我的方法中手动提交事务才能在提交时捕获异常?(EntityManager.flush()这样做是正确的方法吗?)如果是这样,容器管理事务的意义何在?

4

1 回答 1

4

不幸的是,无法从容器管理的事务失败中捕获异常。正如您所说,您最好的选择是使用 bean 管理的事务。或者,您可以使用实现相同接口的代理 bean 包装您的 EM EJB。当您的代码不需要响应特定的提交失败时,容器管理的事务是合适的。

于 2010-10-27T04:31:44.723 回答