JPA2.0中@Post回调方法的行为,即@PostUpdate、@PostCreate等

JPA2.0中@Post回调方法的行为,即@PostUpdate、@PostCreate等,jpa,callback,jpa-2.0,Jpa,Callback,Jpa 2.0,大家好 我无法理解@Post回调方法的确切行为。正如ProJPA书籍中提到的“当用于删除实体的SQL最终发送到数据库时,PostRemove事件将被触发。与PostPersist生命周期事件一样,PostRemove事件不保证成功。封闭事务仍可能回滚” 这里我关心的是,若SQL DELETE语句已经启动,那个么如何回滚事务?如果SQL DELETE语句无法删除该对象,则将引发异常并不会执行@PostDelete。那么,在什么情况下可以回滚事务 谢谢大家抽出时间 根据JPA规范:@PostRemo

大家好

我无法理解@Post回调方法的确切行为。正如ProJPA书籍中提到的“当用于删除实体的SQL最终发送到数据库时,PostRemove事件将被触发。与PostPersist生命周期事件一样,PostRemove事件不保证成功。封闭事务仍可能回滚”

这里我关心的是,若SQL DELETE语句已经启动,那个么如何回滚事务?如果SQL DELETE语句无法删除该对象,则将引发异常并不会执行@PostDelete。那么,在什么情况下可以回滚事务

谢谢大家抽出时间


根据JPA规范:@PostRemove回调是在EntityManager上的remove操作之后执行的

要理解的关键点是,如果移除失败,EntityManager上的移除操作不会引发异常。事务可以标记为“仅回滚”(即,它意味着事务结束时将回滚该事务…并且在事务结束时抛出异常)

JPA规范表明@PostRemove回调将被执行(当然,在与remove操作相同的事务中),而不考虑“Rollback Only”标志

这意味着您可以在@PostRemove中执行其他数据库操作:这些操作将是同一事务的一部分(因此,如果出现问题,也将回滚)。其推论是:如果有东西仅在@PostRemove期间将事务标记为回滚:则不会在数据库上执行删除操作