【问题标题】:JPA Adding Logic to Removing an EntityJPA 添加逻辑以删除实体
【发布时间】:2010-08-25 07:38:18
【问题描述】:

我对使用 JPA 有点陌生——我会马上把它放在那里。我越来越熟悉它,但我现在的知识存在很大的漏洞。

我正在开发一个使用 JPA 的应用程序,并使用 EntityManager.remove(Object entity) 函数删除实体。但是,该应用程序还链接到第三方应用程序,我想添加在从持久层中删除某种类型的实体时执行的逻辑。

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

非常感谢。

【问题讨论】:

    标签: java orm jpa


    【解决方案1】:

    实体类可能有带有@PreRemove@PostRemove 注释的方法。

    【讨论】:

    • 我正在研究这些,这些看起来就像我正在寻找的东西。看起来 PostRemove 在提交点附近被调用。虽然我看到它不能保证数据库实体确实被删除,但它至少不太容易受到事务回滚的影响。对吗?
    • 到目前为止我记得,@PreRemove 总是会在 tx 内部被调用,但是 @PostRemove 可以在 tx 内部或外部调用,这取决于刷新发生的时间,至少在提交之前,但也可能发生在 tx 中。我怀疑您应该在 PreRemove 中完成工作,并确保从 tx 的角度来看您所做的一切正常。
    【解决方案2】:

    如果您使用的是 Eclipselink,它通过 DescriptorEventListener 接口拥有更精细的原生事件系统。

    【讨论】:

    • 我实际上在使用 TopLink,但随着我不断发现有关 Eclipselink 的一切,它看起来像是功能更全的亲戚。
    猜你喜欢
    • 2021-02-14
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多