JPA实体PrePersist和PreRemove回调,它们在应用程序的每个生命周期中只被触发一次吗?

时间:2013-05-06 16:33:23

标签: jpa callback entity listener lifecycle

JPA 2.0规范讨论了第{95页的PrePersistPreRemove回调:

  

为给定的方法调用PrePersist和PreRemove回调方法   实体在各个EntityManager之前保持并删除   执行该实体的操作。对于哪些实体   已应用合并操作并导致新创建   托管实例,将调用PrePersist回调方法   实体状态复制到托管实例后的托管实例。   这些PrePersist和PreRemove回调也将在所有调用上调用   这些操作级联的实体。 PrePersist和   PreRemove方法将始终作为同步的一部分调用   持久化,合并和删除操作。

我的母语不是英语,所以我可能会误解另一个家伙会非常清楚。或者引用可以使用一两个澄清。但我不明白:

在运行的Java EE应用程序的每个生命周期内,是否只调用一次PrePersist和PreRemove回调?

如果回调与对EntityManager#persist(java.lang.Object)EntityManager#remove(java.lang.Object)的调用完全同步,那么我希望回调只被触发一次。我通常不会多次坚持我的实体,也不会一次又一次地删除它们只是为了它的乐趣。唉,这只是“我的理由”。

但是!假设您拥有的代码将在新事务开始时保留一个实体,然后在同一事务中将实体与一些新的和非持久化实体挂钩。在事务提交之前,在所有这些关系上激活对EntityManager#persist的辅助平滑调用对所有这些关系进行级联持久操作将是直观的,当然也没有错。在这种情况下.. 是否会再次调用PrePersist回调,是次要的?

0 个答案:

没有答案