RollbackException隐藏ValidationException

时间:2014-09-01 13:39:50

标签: java-ee jpa jax-rs bean-validation

我使用JAX-RS来更新实体,并且我有一个ValidationException映射器来处理验证错误。

在我的JAX-RS方法中,我将实体的更新委托给一个使用内部EntityManager#merge来完成工作的EJB方法。

一切正常但是当我有一个验证约束错误时,我没有使用由我的JAX-RS包装器处理的ValidationException,而是包含了一个包装我的ValidationException的RollbackException。因此,我的异常包装器不会被调用。

我想到了几种解决方法:

  • 在调用EJB
  • 之前在JAX-RS方法中验证我的实体
  • 在EJB方法中刷新我的实体管理器,然后在JAX-RS方法中捕获回滚,“解包”验证异常并抛出它。

我正在寻找处理此类问题的最佳方法。你会怎么做?

谢谢,

F.D

1 个答案:

答案 0 :(得分:1)

如果您想使用映射器方法并且所有更改都是通过JAX-RS进行的,我可能会使用JAX-RS Bean Validation支持。您甚至可以禁用基于JPA生命周期的验证(使用'验证模式'无)。

最后,它将归结为您的应用程序的结构以及您的偏好。