在jpa中批量查询后通知实体回调方法

notifying entity call back methods after bulk query in jpa

jpa实体回调方法是如何工作的? 他们只在执行 em.merge()em.create() 等单个 jpa 操作时收到通知吗?或者如果我使用 em.createQuery().executeUpdate() 他们会收到通知? (也适用于命名查询)

我可以使用它们代替真正的数据库触发器吗?

我没有找到直接的声明,但是从下面的引用中(JPA 2.1 规范, Chapter 4.10 Bulk Update and Delete Operations),我知道在 BULK 更新或删除中,不会调用侦听器,因为持久性上下文不会看到更改的实体:

[In a bulk update or bulk delete] The persistence context is not synchronized with the result of the bulk update or delete.

所以答案是:只有在单个 JPA 操作中才会更改侦听器。

侦听器与数据库触发器不同:JPA 侦听器的一个约束是您不应该更改关系或其中的其他实体(尽管一些 JPA 提供程序可能支持这一点)。