`

EJB3.0笔记-1 Entity回调和监听器

阅读更多
在你执行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{……}
0
0
分享到:
评论

相关推荐

    EJB3.0规范-EJB3.0 SPECIFICATION

    1. **注解驱动(Annotation-based)**:EJB3.0弃用了XML配置文件,转而采用注解来声明实体Bean、会话Bean和消息驱动Bean的元数据。这使得代码更加简洁,减少了配置文件的维护工作,例如`@Entity`、`@Stateless`、`@...

    Ejb3.0--4

    NULL 博文链接:https://xiaocong1001.iteye.com/blog/258852

    EJB3.0规范和API文档

    **EJB 3.0规范和API文档** Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的核心组成部分,用于构建可扩展、安全且事务处理能力强大的分布式应用程序。EJB 3.0是EJB规范的一个重大更新,极大地简化了开发...

    EJB3.0入门经典(PDF)

    《EJB3.0入门经典》是关于EJB 3.0的专业技术教程,从实用的角度出发,理论联系实际,用9章的篇幅详细讲解了EJB 3.0开发的方法和技巧。《EJB3.0入门经典》内容丰富,讲解由浅入深,全面系统,在讲解EJB 3.0最新开发...

    Ejb3.0--2

    NULL 博文链接:https://xiaocong1001.iteye.com/blog/252686

    Entity-EJB3.0.rar_EJB3.0

    在这个"Entity-EJB3.0.rar"压缩包中,我们很可能找到了关于EJB 3.0实体Bean(Entity Beans)的示例代码和相关文档。 EJB 3.0引入了以下几个关键特性: 1. **注解驱动**:在EJB 3.0中,开发者可以使用Java注解...

    EJB3.0--很不错的EJB教程

    很不错的EJB教程,请大家好好珍惜 好好看

    ejb-api-3.0-sources

    ejb-api-3.0-sources ejb3.0资源文件,源代码文件

    agent-ejb-3.0-beta-1-sources.jar

    标签:agent-ejb-3.0-beta-1-sources.jar,agent,ejb,3.0,beta,1,sources,jar包下载,依赖包

    agent-ejb-3.0-beta-1-javadoc.jar

    标签:agent-ejb-3.0-beta-1-javadoc.jar,agent,ejb,3.0,beta,1,javadoc,jar包下载,依赖包

    agent-ejb-3.0-beta-1.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,agent,car,ejb,3.0,beta,1,sources,jar包下载,依赖包

    ejb2.0与ejb3.0的区别

    随着技术的发展,EJB经历了多个版本的迭代,其中EJB 2.0和EJB 3.0是两个重要的里程碑版本。本文将详细阐述这两个版本之间的主要区别。 #### 二、实体Bean管理方式的变化 - **EJB 2.0**:使用Entity Beans来持久化...

    EJB 3.0规范官方文档

    1. **实体Bean(Entity Beans)**:EJB 3.0引入了基于POJO(Plain Old Java Object)的实体Bean,允许开发者使用注解来定义持久化逻辑,而不再需要复杂的接口和Home/Remote接口。这使得实体Bean的创建和维护变得更加...

    ejb3.0开发规范PDF

    EJB(Enterprise JavaBeans)3.0是Java企业级应用开发的一个重要标准,它定义了如何在Java EE(Java Platform, Enterprise Edition)环境中构建可复用的、组件化的服务器端应用程序。EJB 3.0的发布极大地简化了EJB的...

    ejb3.0开发实例(java工程)

    1. **注解驱动**:EJB 3.0最大的变革之一就是大量使用注解(Annotation),减少了XML配置文件的使用。例如,@Stateless、@Stateful、@MessageDriven等注解分别用于声明无状态会话bean、有状态会话bean和消息驱动bean...

    ejb3.0入门图文教程

    首先,我们来看《EJB3.0开发Entity.pdf》。在EJB 3.0中,Entity Bean代表持久化对象,它存储在数据库中并与数据库进行交互。这个部分将介绍如何定义实体bean,包括使用JPA(Java Persistence API)来注解实体类,...

    ejb3.0中文版--

    1. **实体Bean(Entity Beans)**:在EJB 3.0中,实体Bean的定义更加简洁。不再需要编写Home和Remote接口,而是通过@Entity注解来标识一个Java类作为持久化实体。同时,@Id注解用于指定主键字段,而JPA处理了大部分...

    李腾飞EJB3.0 源码 源代码

    7. **生命周期方法**:EJB 3.0定义了一些生命周期回调方法,如`@PostConstruct`和`@PreDestroy`,允许开发者在Bean创建和销毁时执行特定的逻辑。 **李腾飞EJB 3.0 源码解析** "李腾飞EJB3.0 源码 源代码"可能包含...

Global site tag (gtag.js) - Google Analytics