在你执行EntityManager的persist()、merge、remove和find方法时,或者在执行EJB QL查询时,一系列预先定义好的生命周期事件会被触发。Java Persistence规范允许在entity class上设置回调方法,当这些事件发生时,该entity会收到相应的通知。也可以注册一些单独的监听类来拦截这些事件
回调事件
它们代表了entity生命周期中的一个阶段(pre表示之前,post表示之后)
@javax.persistence.PrePersist; @javax.persistence.PostPersist;
@javax.persistence.PreUpdate; @javax.persistence.PostUpdate;
@javax.persistence.PreRemove; @javax.persistence.PostRemove; @javax.persistence.PostLoad(在查询数据或refresh()时会触发)
Entity Class上的回调方法
通过为entity bean 的任何一个public、private、protected或package-protected方法添加注解,当某个接受托管的entity实例触发事件时,entity manager会调用entity bean上被添加了注解的相应方法。回调方法必须返回void,不抛出checked exception,并无传入参数。如:
@PostPersist void afterInsert(){………}
等价的ORM映射文件
<entity class=”com.titan.domain.Cabin”>
<post-persist name=” afterInsert”/>
</entity>
Entity 监听器
Entity监听器是一种能够拦截entity回调事件的类。它本身不是entity class,它必须有一个公有无参构造函数,监听方法必须返回void,并接受一个Object类型的参数,它就是触发事件的entity实例
public class TitanAuditLogger{
@PostPersist void postInsert(Object entity){……..}
}
通过@javax.persistence.EntityListeners注解把监听器应用于某个entity class
@Entity
@EntityListeners{ TitanAuditLogger.class,其它监听器}
public class Cabin{….}
等价XML
<entity class=”com.titan.domain.Cabin”>
<entity-listeners>
<entity-listener class=”com.titan.listeners.TitanAuditLogger”>
<post-resist name=” postInsert”/>
</ entity-listener >
</entity-listeners >
</entity>
Entity监听器的执行顺序是它们在@EntityListeners注解或ORM XML映射文件中的声明顺序,而任何在entity class上声明的回调方法则会在其后被调用
默认的Entity监听器
可以在ORM映射文件中,通过顶层元素<entity-mappings>下的<entity-listeners>元素,为persistence unit中的每一个entitty class指定一组默认的entity监听器,如:
<entity-mappings>
<entity-listeners>
<entity-listeners>
<entity-listener class=”com.titan.listeners.TitanAuditLogger”>
<post-resist name=” postInsert”/>
</ entity-listener >
</entity-listeners >
</entity-listeners>
</entity-mappings>
如果想关闭默认的entity监听器,可以使用@javax.persistence.ExcludeDefaultListeners注解
@Entity
@ExcludeDefaultListeners
public class Cabin{….}
等价的XML
<entity class=”com.titan.domain.Cabin”>
<exclude-default-listeners/>
</entity>
继承与监听器的关系
如果在一个实体的继承层次中,entity监听器被用于基类,则所有子类都会继承基类的监听器。基类的监听器会先于子类的监听器执行,如果想关闭从父类继承下来的entity监听器,可以使用@javax.persistence.ExcludeSupperclassListeners,如:
@Entity
@ExcludeSupperclassListeners
public class Customer extends Person{……}
分享到:
相关推荐
1. **注解驱动(Annotation-based)**:EJB3.0弃用了XML配置文件,转而采用注解来声明实体Bean、会话Bean和消息驱动Bean的元数据。这使得代码更加简洁,减少了配置文件的维护工作,例如`@Entity`、`@Stateless`、`@...
NULL 博文链接:https://xiaocong1001.iteye.com/blog/258852
**EJB 3.0规范和API文档** Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的核心组成部分,用于构建可扩展、安全且事务处理能力强大的分布式应用程序。EJB 3.0是EJB规范的一个重大更新,极大地简化了开发...
《EJB3.0入门经典》是关于EJB 3.0的专业技术教程,从实用的角度出发,理论联系实际,用9章的篇幅详细讲解了EJB 3.0开发的方法和技巧。《EJB3.0入门经典》内容丰富,讲解由浅入深,全面系统,在讲解EJB 3.0最新开发...
NULL 博文链接:https://xiaocong1001.iteye.com/blog/252686
在这个"Entity-EJB3.0.rar"压缩包中,我们很可能找到了关于EJB 3.0实体Bean(Entity Beans)的示例代码和相关文档。 EJB 3.0引入了以下几个关键特性: 1. **注解驱动**:在EJB 3.0中,开发者可以使用Java注解...
很不错的EJB教程,请大家好好珍惜 好好看
ejb-api-3.0-sources ejb3.0资源文件,源代码文件
标签:agent-ejb-3.0-beta-1-javadoc.jar,agent,ejb,3.0,beta,1,javadoc,jar包下载,依赖包
标签:agent-ejb-3.0-beta-1-sources.jar,agent,ejb,3.0,beta,1,sources,jar包下载,依赖包
标签:agent-ejb-3.0-beta-1.jar,agent,ejb,3.0,beta,1,jar包下载,依赖包
标签:agent-car-ejb-3.0-beta-1-sources.jar,agent,car,ejb,3.0,beta,1,sources,jar包下载,依赖包
随着技术的发展,EJB经历了多个版本的迭代,其中EJB 2.0和EJB 3.0是两个重要的里程碑版本。本文将详细阐述这两个版本之间的主要区别。 #### 二、实体Bean管理方式的变化 - **EJB 2.0**:使用Entity Beans来持久化...
1. **实体Bean(Entity Beans)**:EJB 3.0引入了基于POJO(Plain Old Java Object)的实体Bean,允许开发者使用注解来定义持久化逻辑,而不再需要复杂的接口和Home/Remote接口。这使得实体Bean的创建和维护变得更加...
EJB(Enterprise JavaBeans)3.0是Java企业级应用开发的一个重要标准,它定义了如何在Java EE(Java Platform, Enterprise Edition)环境中构建可复用的、组件化的服务器端应用程序。EJB 3.0的发布极大地简化了EJB的...
1. **注解驱动**:EJB 3.0最大的变革之一就是大量使用注解(Annotation),减少了XML配置文件的使用。例如,@Stateless、@Stateful、@MessageDriven等注解分别用于声明无状态会话bean、有状态会话bean和消息驱动bean...
首先,我们来看《EJB3.0开发Entity.pdf》。在EJB 3.0中,Entity Bean代表持久化对象,它存储在数据库中并与数据库进行交互。这个部分将介绍如何定义实体bean,包括使用JPA(Java Persistence API)来注解实体类,...
1. **实体Bean(Entity Beans)**:在EJB 3.0中,实体Bean的定义更加简洁。不再需要编写Home和Remote接口,而是通过@Entity注解来标识一个Java类作为持久化实体。同时,@Id注解用于指定主键字段,而JPA处理了大部分...
7. **生命周期方法**:EJB 3.0定义了一些生命周期回调方法,如`@PostConstruct`和`@PreDestroy`,允许开发者在Bean创建和销毁时执行特定的逻辑。 **李腾飞EJB 3.0 源码解析** "李腾飞EJB3.0 源码 源代码"可能包含...