2008年(60)
分类: Java
2008-04-28 09:23:43
如果需要在生命周期事件期间执行自定义逻辑,请使用以下生命周期事件批注关联生命周期事件与回调方法:
演示了 JPA 支持的实体生命周期事件之间的关系。
可以直接对实体方法进行批注,也可以指定一个或多个实体监听程序类(请参阅 )。
如果直接对实体方法进行批注,则该实体方法必须满足以下要求:
实体类方法必须具有以下签名:
public int()
实体类方法可以有任何方法名称,只要它不以 ejb
开头。
图 1-1 JPA 实体生命周期回调事件批注
将实体加载到数据库的当前持续性上下文中后或在向其应用了刷新操作后,调用实体的 @PostLoad
方法。在返回或访问查询结果之前或在遍历关联之前调用该方法。
如果要在实体生命周期中的该点调用自定义逻辑,请使用 @PostLoad
批注。
此批注没有属性。有关更多详细信息,请参阅 。
在实体成为持久实体后,调用该实体的 @PostPersist
回调方法。对该操作层叠到的所有实体调用该方法。在数据库插入操作之后调用该方法。这些数据库操作可能在调用了持久操作之后立即发生,也可能在刷新操作(可能在事务结束时发生)发生之后立即发生。PostPersist 方法中提供了生成的主键值。
使用 @PostPersist
批注通知任何相关对象或更新直到插入对象时才可以访问的信息。
此批注没有属性。有关更多详细信息,请参阅 。
在删除实体后,调用该实体的 @PostRemove
回调方法。对该操作层叠到的所有实体调用该方法。在数据库删除操作之后调用该方法。这些数据库操作可能在调用了删除操作之后立即发生,也可能在刷新操作(可能在事务结束时发生)发生之后立即发生。
使用 @PostRemove
批注通知任何相关对象。
此批注没有属性。有关更多详细信息,请参阅 。
在对实体数据进行了数据库更新操作后,调用实体的 @PostUpdate
回调方法。这些数据库操作可以在更新实体状态时发生,也可以在将状态刷新到数据库(位于事务结尾)时发生。注意,究竟此回调是在持久保存实体并随后在单个事务中修改实体时发生还是在修改了实体并随后在单个事务中删除实体时发生与实现相关。可移植应用程序不应依赖此行为。
如果要在实体生命周期的该点调用自定义逻辑,请使用 @PostUpdate
批注。
此批注没有属性。有关更多详细信息,请参阅 。
在执行给定实体的相应 EntityManager 持久操作之前,调用该实体的 @PrePersist
回调方法。对于向其应用了合并操作并导致创建新管理的实例的实体而言,在向其复制了实体状态后对管理的实例调用该方法。对该操作层叠到的所有实体调用该方法。
如果要在实体生命周期期间的该点调用自定义逻辑,请使用 @PrePersist
批注。
此批注没有属性。有关更多详细信息,请参阅 。
在针对给定实体执行相应的 EntityManager 删除操作之前,调用该给定实体的 @PreRemove
回调方法。对该操作层叠到的所有实体调用该方法。
如果要在实体生命周期中的该点调用自定义逻辑,请使用 @PreRemove
批注。
此批注没有属性。有关更多详细信息,请参阅 。
在对实体数据进行数据库更新操作之前,调用实体的 @PreUpdate
回调方法。这些数据库操作可以在更新实体状态时发生,也可以在将状态刷新到数据库(可能位于事务结尾)时发生。请注意:此回调是否在持久保存实体并随后在单个事务中修改该实体时发生,均依赖于实施。可移植应用程序不应依赖此行为。
如果要在实体生命周期的该点调用自定义逻辑,请使用 @PreUpdate
批注。
此批注没有属性。有关更多详细信息,请参阅 。