2010-08-24 57 views
0

我对使用JPA稍微有些新东西 - 我会把它放在那里。我越来越熟悉它,但是现在我的知识存在很大的漏洞。JPA将逻辑添加到删除实体

我正在使用JPA的应用程序,并删除使用EntityManager.remove(对象实体)函数的实体。然而,应用程序也链接到第三方应用程序,并且我想添加从持久层中删除特定类型的实体时执行的逻辑。

我的问题是这样的。有没有办法在Entity类级别上向EntityManager.remove(Object entity)函数添加逻辑,这样每次删除该类型的实体时都会执行额外的逻辑?

非常感谢。

回答

3

实体类可能有注解为@PreRemove@PostRemove的方法。

+0

我正在寻找那些,看起来像我在找什么。看起来PostRemove被调用更接近提交点。虽然我看到它不能保证数据库实体实际上被删除,但它至少不容易受到事务回滚的影响。那是对的吗? – MikeTheReader 2010-08-24 18:07:43

+0

到目前为止,我还记得,@PreRemove将总是在tx内被调用,但@PostRemove可以在tx内部或外部调用,具体取决于何时发生刷新,这将至少在提交之前发生,但也可以在tx内发生。我怀疑你应该在PreRemove中做这项工作,并确保你从tx的角度来看你所做的事情是否可行。 – ewernli 2010-08-24 18:35:39

0

如果您使用Eclipselink,它通过DescriptorEventListener接口具有更细粒度的本地事件系统。

+0

我实际上使用的是TopLink,但是对于我一直发现的关于Eclipselink的一切,它看起来像是功能更全面的亲戚。 – MikeTheReader 2010-08-24 19:16:35