`
suhuanzheng7784877
  • 浏览: 692460 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47278
社区版块
存档分类
最新评论

JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作--2(实体监听器)

阅读更多

1.      实体监听器的使用

在增、删、改操作之前、和之后都可以添加监听器,来监视对象CURD的操作状态或日志写入。类似于AOP的思想,监听器方法在准备执行增、删、改或者执行完增、删、改之后想做一些自己的操作,那么监听器是一个不错的选择,当然使用SpringAOP或者仅仅使用AspectJ在业务DAO作为执行前、后的用户个性化操作也是不错的。只是这种实体监听器仅仅针对于JPA实体Bean的。而查询方法,只有Load仅有一个查询之后才能调用的监听方法,在Load执行之前的监听方法是没有的。

如表所描述:

注解名称

说明

@PrePersist

在持久化实体之前调用

@PostPersist

在持久化实体之后调用

@PreUpdate

Updaye实体之前调用

@PostUpdate

Update实体之前调用

@PreRemove

在删除实体之前调用

@PostRemove

在删除化实体之前调用

@PostLoad

在加载实体之后调用

需要说明的就是,如果方法中发生了任何异常,那么事务会回滚。实际上实体监听器就是实体生命周期的回调函数。

设置实体监听器有三种方式:

1.      配置文件方式——默认方式

通过配置/META-INF/orm.xml文件为每一个实体Bean都加上监听器。

配置文件如下:

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"

    version="1.0">

    <persistence-unit-metadata>

       <persistence-unit-defaults>

           <entity-listeners>

              <entity-listener class="jpalistener.DefaultEntityListener">

                  <pre-persist method-name="perAdd"></pre-persist>

                  <pre-remove method-name="perRemove"></pre-remove>

                  <pre-update method-name="perUpdate"></pre-update>

                  <post-update method-name="postUpdate"></post-update>

                  <post-remove method-name="postRemove"></post-remove>

                  <post-persist method-name="postAdd"></post-persist>

                  <post-load method-name="postLoad"></post-load>

              </entity-listener>

           </entity-listeners>

       </persistence-unit-defaults>

    </persistence-unit-metadata>

</entity-mappings>

如果类前面加入@ExcludeDefaultListeners则该实体监听器无效。

2.      单独的监听器类(较为常用)

监听器类如下

DefaultEntityListener

package jpalistener;

 

import javax.persistence.PostLoad;

import javax.persistence.PostPersist;

import javax.persistence.PostRemove;

import javax.persistence.PostUpdate;

import javax.persistence.PrePersist;

import javax.persistence.PreRemove;

import javax.persistence.PreUpdate;

 

public class DefaultEntityListener {

 

    public DefaultEntityListener() {

 

    }

   

    @PostLoad

    public void postLoad(Object object) {

       System.out.println("postLoad");

    }

   

    @PrePersist

    public void perAdd(Object object) {

       System.out.println("perAdd");

    }

   

    @PostPersist

    public void postAdd(Object object) {

       System.out.println("postAdd");

    }

   

    @PreUpdate

    public void perUpdate(Object object){

       System.out.println("perUpdate");

    }

   

    @PostUpdate

    public void postUpdate(Object object){

       System.out.println("postUpdate");

    }

   

    @PreRemove

    public void perRemove(Object object){

       System.out.println("perRemove");

    }

   

    @PostRemove

    public void postRemove(Object object){

       System.out.println("postRemove");

    }

}

在实体类前面加入@EntityListeners(DefaultEntityListener.class)注解就可以了。那么所有标记了此注解的实体Bean生命状态发生变化后都会调用相关的监听方法。

3.      每个实体类单独配置监听器(一般不会使用此策略)

将监听方法写在实体Bean中,用注解告诉JPA实体管理器,此类有生命周期状态需要监听。

分享到:
评论

相关推荐

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    虽然持久化实体的状态在ORM中是一个老生常谈的问题,...在Web一般情况下也都是交给Spring去管理实体管理器(EntityManager),所以我们还是有必要啰嗦一下,至于肢体的高级操作,实际上也就是实体监听器的使用而已。

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.8 实体的生命周期和监听器 444 10.8.1 实体的生命周期与回调事件 444 10.8.2 使用专门的监听器实现回调 448 10.8.3 为全部实体配置默认监听器 450 10.8.4 排除监听器 452 10.9 本章小结 455 第11章 JPA的查询支持...

    JAVA基础知识点HTML格式教程编程实例20000源代码

    实体监听、实体管理器、实体合并、实体序列化、实体主键、实体关系 实体二级表、实体更新、实体、注射、拦截、J2SE JBoss公司、JCA、JNDI、本地远程、管理、消息组件 开放式EJB(16)、持久性、资源、安全、购物车、有...

    Hibernate实战(第2版 中文高清版)

     12.3.4 实体监听器和回调   12.4 小结   第13章 优化抓取和高速缓存   13.1 定义全局抓取计划   13.1.1 对象获取选项   13.1.2 延迟的默认抓取计划   13.1.3 理解代理   13.1.4 禁用代理生成   ...

    Spring in Action(第二版 中文高清版).part2

    10.3.1 创建消息监听器 10.3.2 编写纯POJO MDP 10.4 使用基于消息的RPC 10.4.1 引入Lingo 10.4.2 输出服务 10.4.3 代理JMS 10.5 小结 第11章 Spring和EJB 11.1 在Spring中置入EJB 11.1.1 代理会话Bean...

    Spring in Action(第2版)中文版

    10.3.1创建消息监听器 10.3.2编写纯pojomdp 10.4使用基于消息的rpc 10.4.1引入lingo 10.4.2输出服务 10.4.3代理jms 10.5小结 第11章spring和ejb 11.1在spring中置入ejb 11.1.1代理会话bean(ejb2.x) 11.1.2...

    Spring in Action(第二版 中文高清版).part1

    10.3.1 创建消息监听器 10.3.2 编写纯POJO MDP 10.4 使用基于消息的RPC 10.4.1 引入Lingo 10.4.2 输出服务 10.4.3 代理JMS 10.5 小结 第11章 Spring和EJB 11.1 在Spring中置入EJB 11.1.1 代理会话Bean...

    Spring-Reference_zh_CN(Spring中文参考手册)

    11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口 ...

    Java Web整合开发王者归来2/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

    Java.Web整合开发王者归来.part2.rar (共3部分)

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过 滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的 使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等 ;第4篇为...

    Java.Web整合开发王者归来.part05.rar

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...

    Java.Web整合开发王者归来.part2

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等; 第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等; 第4篇为...

    Java Web 整合开发王者归来9/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

    Java Web整合开发王者归来1/16

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...

    Java Web整合开发王者归来10/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

    Java Web整合开发王者归来12/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

    Java Web整合开发王者归来16/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

    Java Web整合开发王者归来3/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

    Java Web整合开发王者归来6/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

    Java Web整合开发王者归来7/16

    踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括...

Global site tag (gtag.js) - Google Analytics