JPA生命周期事件批注

来源:互联网 发布:知世图片 编辑:程序博客网 时间:2024/05/29 18:01

生命周期事件批注

如果需要在生命周期事件期间执行自定义逻辑,请使用以下生命周期事件批注关联生命周期事件与回调方法:

  • @PostLoad

  • @PostPersist

  • @PostRemove

  • @PostUpdate

  • @PrePersist

  • @PreRemove

  • @PreUpdate

图 1-1 演示了 JPA 支持的实体生命周期事件之间的关系。

可以直接对实体方法进行批注,也可以指定一个或多个实体监听程序类(请参阅 @EntityListeners)。

如果直接对实体方法进行批注,则该实体方法必须满足以下要求:

  • 实体类方法必须具有以下签名:

    public int <MethodName>()

  • 实体类方法可以有任何方法名称,只要它不以 ejb 开头。

图 1-1 JPA 实体生命周期回调事件批注

随后是图 1-1 的描述
“图 1-1 JPA 实体生命周期回调事件批注”的描述”

@PostLoad

将实体加载到数据库的当前持续性上下文中后或在向其应用了刷新操作后,调用实体的 @PostLoad 方法。在返回或访问查询结果之前或在遍历关联之前调用该方法。

如果要在实体生命周期中的该点调用自定义逻辑,请使用 @PostLoad 批注。

此批注没有属性。有关更多详细信息,请参阅 API

@PostPersist

在实体成为持久实体后,调用该实体的 @PostPersist 回调方法。对该操作层叠到的所有实体调用该方法。在数据库插入操作之后调用该方法。这些数据库操作可能在调用了持久操作之后立即发生,也可能在刷新操作(可能在事务结束时发生)发生之后立即发生。PostPersist 方法中提供了生成的主键值。

使用 @PostPersist 批注通知任何相关对象或更新直到插入对象时才可以访问的信息。

此批注没有属性。有关更多详细信息,请参阅 API

@PostRemove

在删除实体后,调用该实体的 @PostRemove 回调方法。对该操作层叠到的所有实体调用该方法。在数据库删除操作之后调用该方法。这些数据库操作可能在调用了删除操作之后立即发生,也可能在刷新操作(可能在事务结束时发生)发生之后立即发生。

使用 @PostRemove 批注通知任何相关对象。

此批注没有属性。有关更多详细信息,请参阅 API

@PostUpdate

在对实体数据进行了数据库更新操作后,调用实体的 @PostUpdate 回调方法。这些数据库操作可以在更新实体状态时发生,也可以在将状态刷新到数据库(位于事务结尾)时发生。注意,究竟此回调是在持久保存实体并随后在单个事务中修改实体时发生还是在修改了实体并随后在单个事务中删除实体时发生与实现相关。可移植应用程序不应依赖此行为。

如果要在实体生命周期的该点调用自定义逻辑,请使用 @PostUpdate 批注。

此批注没有属性。有关更多详细信息,请参阅 API

@PrePersist

在执行给定实体的相应 EntityManager 持久操作之前,调用该实体的 @PrePersist 回调方法。对于向其应用了合并操作并导致创建新管理的实例的实体而言,在向其复制了实体状态后对管理的实例调用该方法。对该操作层叠到的所有实体调用该方法。

如果要在实体生命周期期间的该点调用自定义逻辑,请使用 @PrePersist 批注。

此批注没有属性。有关更多详细信息,请参阅 API

@PreRemove

在针对给定实体执行相应的 EntityManager 删除操作之前,调用该给定实体的 @PreRemove 回调方法。对该操作层叠到的所有实体调用该方法。

如果要在实体生命周期中的该点调用自定义逻辑,请使用 @PreRemove 批注。

此批注没有属性。有关更多详细信息,请参阅 API

@PreUpdate

在对实体数据进行数据库更新操作之前,调用实体的 @PreUpdate 回调方法。这些数据库操作可以在更新实体状态时发生,也可以在将状态刷新到数据库(可能位于事务结尾)时发生。请注意:此回调是否在持久保存实体并随后在单个事务中修改该实体时发生,均依赖于实施。可移植应用程序不应依赖此行为。

如果要在实体生命周期的该点调用自定义逻辑,请使用 @PreUpdate 批注。

此批注没有属性。有关更多详细信息,请参阅 API