Entity的生命周期和状态

    技术2022-05-11  14

    在EJB3 中定义了四种Entity的状态: 1. 新实体(new)。Entity由应用产生,和EJB3 Persistence运行环境没有联系,也没有唯一的标示符(Identity)。 2. 持久化实体(managed)。新实体和EJB3 Persistence运行环境产生关联(通过persist(), merge()等方法),在EJB3Persistence运行环境中存在和被管理,标志是在EJB3 Persistence运行环境中有一个唯一的标示(Identity)。 3. 分离的实体(detached)。Entity有唯一标示符,但它的标示符不被EJB3 Persistence运行环境管理, 同样的该 Entity也不被EJB3 Persistence运行环境管理。 4. 删除的实体(removed)。Entity被remove()方法删除,对应的纪录将会在当前事务提交的时候从数据库中删除。 当你执行持久化方法,如: persist( ), merge( ), remove( ), find( )或EJB QL查询的时候,实体的生命周期事件将会触 发。例如,persist( )方法触发数据插入事件,merge( )方法触发数据更新事件,remove( )方法触发数据删除事件, 通过EJB QL查询实体会触发数据载入事件。有时实体类得到这些事件发生的通知是非常有用的,例如,你想创 建一个日志文件,用来记录数据库每条记录发生的操作(如:添,删,载入等)。 持久化规范允许你在实体类中实现回调方法,当这些事件发生时将会通知你的实体对象。当然你也可以使用一个 外部类去拦截这些事件,这个外部类称作实体监听者。通过@EntityListeners注释绑定到实体Bean。 这一节将教你如何在实体类中实现生命周期回调方法及怎样实现一个能拦截实体生命周期事件的实体监听者

    生命周期回调事件 如果需要在生命周期事件期间执行自定义逻辑,请使用以下生命周期事件注释关联生命周期事件与回调方法,EJB 3.0 允许你将任何方法指定为回调方法。这些方法将会被容器在实体生命周期的不同阶段调用。 @javax.persistence.PostLoad @javax.persistence.PrePersist @javax.persistence.PostPersist @javax.persistence.PreUpdate @javax.persistence.PostUpdate @javax.persistence.PreRemove @javax.persistence.PostRemove

    下图演示了实体生命周期事件之间的关系:


    最新回复(0)