JPA 2.0规范讨论了第{95页的PrePersist
和PreRemove
回调:
为给定的方法调用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回调,是次要的?