1. 实体监听器的使用
在增、删、改操作之前、和之后都可以添加监听器,来监视对象CURD的操作状态或日志写入。类似于AOP的思想,监听器方法在准备执行增、删、改或者执行完增、删、改之后想做一些自己的操作,那么监听器是一个不错的选择,当然使用Spring的AOP或者仅仅使用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中非常重要的概念。通过理解和应用这些概念,开发者可以更好地控制数据的持久化过程,并实现高效、可靠的应用程序开发。无论是从数据同步的角度考虑,还是从日志记录的...
通过这个"Entity-EJB3.0"示例,我们可以学习如何创建和使用EJB 3.0实体Bean,了解其基本架构和工作原理,同时也可以掌握JPA和JPQL的用法。在实际项目中,这些知识对于开发基于Java EE的企业级应用至关重要。如果你...
4. **缓存机制**:JPA提供了一级缓存和二级缓存,分别用于缓存实体对象和查询结果,提高应用程序的性能。 5. **事件监听器**:允许在实体生命周期的特定点触发自定义代码,例如,在实体保存前进行预处理或在实体删除...
- **实体对象的监听器和回调方法**:可以通过实体对象的监听器和回调方法来监控实体对象的状态变化,这些监听器可以实现在特定的生命周期事件发生时执行自定义的行为,例如在实体对象被保存前执行某些操作。...
理解和掌握JPA的核心概念,如实体、实体管理器和实体状态,可以帮助开发者更加高效地进行数据库操作,同时利用JPA的自动化特性减轻工作负担。无论是EJB环境还是独立的J2SE或Web应用,JPA都能提供灵活且标准的数据...
拦截器是一种用于监听和修改会话Bean行为的机制,可以应用于无状态会话Bean、有状态会话Bean以及消息驱动Bean。 - **外部拦截器**:定义在单独的类中,并通过`@Interceptors`注解指定给Session Bean使用。 **示例...
在EJB 3中,实体Bean的实现相比之前的版本更为简化,通过注解(Annotations)和JPA(Java Persistence API)进行配置,使得开发更加便捷。 1. **注解驱动的实体Bean**: 在EJB 3中,实体Bean不再需要XML配置文件,...
Java Persistence API (JPA) 是Java企业版5(Java EE 5)的一部分,与Enterprise JavaBeans(EJB)3.0规范一起,极大地简化了Java持久化。它提供了一种对象关系映射方法,允许您以标准、可移植的方式声明性地定义...
JPA提供了自己的查询语言——JPA Query Language(JPA QL),类似于SQL但面向对象,用于查询和操作实体Bean。例如,`SELECT e FROM Entity e WHERE e.name = 'example'`。 7. ** Criteria API** 除了JPA QL,EJB...
- **实体监听器**:除了在实体类中定义回调方法之外,还可以通过实体监听器来处理实体的生命周期事件。实体监听器是独立于实体类的类,可以处理多个实体类的生命周期事件。 #### 五、元数据 - **元数据概念**:元...
此外,还可能涉及了JPA的高级特性,如 Criteria 查询、实体监听器、复合主键、转换和验证等。 总的来说,这个压缩包提供了学习和使用JPA的全面资源,从理论到实践,帮助开发者理解如何在Java应用中有效地进行数据...
【ejb3-persistence】是Java企业版(Enterprise JavaBeans,EJB)3.0规范中的持久化模块,它是Java后端开发中的一个重要组件,主要处理数据库操作和对象关系映射(Object-Relational Mapping,ORM)。在Spring框架中...
JPA允许使用`@PrePersist`、`@PostPersist`、`@PreUpdate`、`@PostUpdate`、`@PreRemove`和`@PostRemove`等注解定义实体的监听器,实现对象状态改变时的自定义逻辑。 ### 7. 拦截器 JPA通过实现`EntityListener`...
8. **事件监听器**:可以通过实现特定接口来监听实体的生命周期事件,如预加载、加载、保存、更新和删除。 通过深入学习上述知识点,并结合提供的示例项目,你可以全面了解和掌握JPA的使用,从而在实际项目中更高效...
3. **EJB核心规范**: ejb-3_0-fr-spec-ejbcore.pdf可能包含了EJB容器的核心功能,如会话bean、消息驱动bean、实体bean(包括容器管理的持久性 CMP 和Bean管理的持久性 BMT)、以及声明式事务和安全性。 **EJB API**...
除此之外,这本书可能还涉及了JPA的扩展特性,如第二级缓存、实体监听器、回调方法(如`@PrePersist`、`@PostLoad`等)以及JPA与其他Java EE组件(如JSF、CDI等)的集成。通过这些高级特性,开发者可以实现更高效、...
通过定义消息监听器和相关的注解来实现。 3. **高级EJB概念**: - **事务管理**:EJB 3.0支持自动和显式事务管理。 - **安全机制**:包括身份验证、授权和加密等功能,以确保数据的安全性。 - **并发控制**:...
- **监听器(Listener)**:监听特定事件的发生,例如用户登录状态的变化、会话的创建与销毁等。 ##### MVC框架的应用 - **Struts 1**: - Struts 1是一种经典的MVC框架,它强调模型(Model)、视图(View)和控制器...
在EJB3.0中,可以使用`@MessageDriven`注解定义一个MDB,并通过`@ActivationConfigProperty`配置监听器属性。 **3. 容器服务** EJB容器提供了一组服务,如安全性、事务管理、生命周期管理等,开发者无需关心底层...