EntityManager 是用来对实体Bean 进行操作的辅助类。他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean。实体Bean 被EntityManager 管理时,EntityManager跟踪他的状态改变,在任何决定更新实体Bean 的时候便会把发生改变的值同步到数据库中。当实体Bean 从EntityManager 分离后,他是不受管理的,EntityManager 无法跟踪他的任何状态改变。EntityManager 的获取前面已经介绍过,可以通过@PersistenceContext 注释由EJB 容器动态注入,例:
@PersistenceContext(unitName="foshanshop")
EntityManager em;
EntityManager常用方法:
1.Entity的获取
find(*.class,ID) :若实体Bean不存在,则返回null
getReference(*,class,ID) :若实体Bean不存在,则抛出javax.persistence.EntityNotFoundException,另,不保 证 实体Bean 已被初始化
注意:若*.class不是Entity Bean的话,都会引发IllegalArgumentException
2.persist() :添加实体Bean
3.更新实体Bean :当实体正在被容器管理时,你可以调用实体的set 方法对数据进行修改,在容器决定flush 时,更新的数据才会同步到数据库。如果你希望修改后的数据实时同步到数据库,你可以执行EntityManager.flush()方法。
4.merge () :是在实体Bean 已经脱离了EntityManager 的管理时使用,当容器决定flush 时,数据将会同步到数据库中,执行em.merge(Object obj)方法时,容器的工作规则:
(1).如果此时容器中已经存在一个受容器管理的具有相同ID 的Object实例,容器将会把参数obj的内容拷贝进这个受管理的实例,merge()方法返回受管理的实例,但参数obj仍然是分离的不受管理的。容器在决定Flush时把实例同步到数据库中。
(2).容器中不存在具有相同ID 的Object实例。容器根据传进的obj参数Copy 出一个受容器管理的Object实例,同时merge()方法会返回出这个受管理的实例,但参数obj仍然是分离的不受管理的。容器在决定Flush时把 实例同步到数据库中。如果传递进merge ()方法的参数不是实体Bean,会引发一个IllegalArgumentException
5.Remove() :删除对象
6.createQuery() 返回Query对象,以执行JPQL语句
7.createNativeQuery() 返回Query对象,以执行SQL语句
8.refresh() 刷新实体Bean,以得到对新对象 (幽雅的获取最新对象方法)
9.contains() 检测实体当前是否被管理中
该方法使用一个实体作为参数,如果这个实体对象当前正被持久化内容管理,返回值为true,否则为false
10.clear() 分离所有当前正在被管理的实体
在处理大量实体的时候,如果你不把已经处理过的实体从EntityManager 中分离出来,将会消耗你大量的内存。调用EntityManager 的clear()方法后,所有正在被管理的实体将会从持久化内容中分离出来。
有一点需要说明下,在事务没有提交前(事务默认在调用堆栈的最后提交,如:方法的返回),如果调用clear()方法,之前对实体所作的任何改变将会掉失,所以建议你在调用clear()方法之前先调用flush()方法保存更改
11. flush() 将实体的改变立刻刷新到数据库中
当实体管理器对象在一个session bean 中使用时,它是和服务器的事务上下文绑定的。实体管理器在服务器的事务提交时提交并且同步它的内容。在一个session bean 中,服务器的事务默认地会在调用堆栈的最后提交(如:方法的返回)
12.javax.persistence.FlushModeType 实体Bean管理器的Flush模式
FlushModeType.COMMIT :刷新只有在事务提交时才发生,使用场合:在大量更新数据的过程中存在查询语句(除了find()和getreference()查询)的执行
FlushModeType.AUTO :(默认模式)刷新在查询语句执行前(除了find()和getreference()查询)或事务提交时才发 生,使用场合:在大量更新数据的过程中没有任何查询语句(除了find()和getreference()查询)的执行。
JDBC 驱动跟数据库交互的次数。JDBC 性能最大的增进是减少JDBC 驱动与数据库之间的网络通讯FlushModeType.COMMIT 模式使更新只在一次的网络交互中完成,而FlushModeType.AUTO 模式可能需要多次交互(触发了多少次Flush 就产生了多少次网络交互)
设置:entityManager.setFlushMode(FlushModeType.COMMIT);
13.getDelegate( ) 获取持久化实现者的引用
用过getDelegate( )方法,你可以获取EntityManager 持久化实现者的引用,如Jboss EJB3 的持久化产品采用Hibernate,可以通过getDelegate( ) 方法获取对他的访问,如:
@PersistenceContext
protected EntityManager em;
HibernateEntityManager manager = (HibernateEntityManager)em.getDelegate();
获得对Hibernate 的引用后,可以直接面对Hibernate 进行编码,不过这种方法并不可取,强烈建议不要使用.在Weblogic 中,你也可以通过此方法获取对Kodo 的访问
另:映射的表名或列名与数据库保留字同名时的处理
将表名加标式符,例如:在Mysql下,用'order',或在sqlserver下用[TableName],但这样做不适合程序移植
相关推荐
6. **操作实体**: 实例化实体,调用EntityManager的persist()、merge()、remove()、find()等方法完成CRUD操作。 7. **查询执行**: 使用createQuery()、createCriteria()创建查询,通过JPQL或Criteria API获取结果集...
- 事务处理:通过EntityManager的begin()、commit()、rollback()方法控制事务。 6. 故障排查: 在实际应用中,可能会遇到各种问题,如懒加载异常、级联操作不当、缓存问题等。了解Hibernate的日志配置和错误信息...
- **EntityManager简介**:`EntityManager`,也称为实体管理器,是Java Persistence API (JPA) 中的核心接口之一,负责处理实体对象的生命周期管理和持久化操作。它由`EntityManagerFactory`创建。 - **...
**MVC3与Entity Framework简介** MVC3(Model-View-Controller)是Microsoft推出的一种用于构建可维护性和测试性的Web应用程序的框架。它将应用程序的业务逻辑、数据访问和用户界面分离,使得开发人员可以更高效地...
除了默认的CRUD操作,Spring Data JPA还支持自定义查询方法,通过方法名即可生成对应的SQL。 4.2 分页查询 Pageable接口支持分页查询,通过Page和Slice接口获取分页结果,包含当前页数据和总页数等信息。 4.3 ...
* 方法命名查询:使用方法命名查询,可以根据方法名来执行查询操作。 * JPQL 查询:使用 JPQL(Java Persistence Query Language)可以执行复杂的查询操作。 * Criteria 查询:使用 Criteria 查询,可以动态构建查询...
【JPA简介】 Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它是ORM(对象关系映射)的一部分,允许我们在Java对象和关系数据库之间进行无缝交互。JPA通过提供EntityManager接口...
- **获取EntityManager**:通过EntityManagerFactory的`createEntityManager()` 方法创建EntityManager实例。 - **持久化上下文**: - **事务性持久化上下文**:与当前事务绑定,当事务结束时,持久化上下文中的...
8. **EntityManager**: 详细讲解了 EntityManager 的使用方法及其生命周期管理功能。 #### 三、关键知识点详解 ##### 3.1 JPA 介绍 - **Intended Audience**: 主要面向开发者和技术人员,特别是那些负责设计和...
- **实体操作**:通过调用 `EquipmentMode.create()` 方法创建一个新的 `EquipmentMode` 实体对象,并调用 `EntityManager` 的 `persist` 方法将其持久化到数据库。 - **数据库操作**:在 MySQL 中执行 `INSERT INTO...
实体从瞬时状态转变为持久化状态通常通过EntityManager的persist()方法完成,而从持久化到脱管则可以通过detach()或clear()方法。 5. EntityManager:这是JPA的核心接口,负责处理数据库操作,如查询、保存、更新和...
1. **Hibernate简介**: Hibernate是Java社区中的一个开源项目,它简化了Java应用与关系数据库之间的交互。通过ORM,它可以将Java对象映射到数据库表,使得数据库操作变得简单且高效。 2. **对象关系映射(ORM)**...
#### 二、ORM框架简介 ORM是一种编程技术,用于将关系型数据库的数据与面向对象模型之间进行转换。在.NET环境中,常见的ORM框架有Entity Framework、NHibernate等。ORM框架的主要优点包括: - **简化数据操作**:...
通过EntityManager的persist()方法可以将新对象持久化到数据库,merge()用于将临时对象合并到持久化上下文中,find()用于根据ID检索对象,remove()则用于删除对象。 **7. 第二级缓存** Hibernate支持第二级缓存,...
1. **创建(Create)**: 使用`EntityManager`的`persist()`方法可以将一个新的实体对象插入数据库。 ```java EntityManager em = entityManagerFactory.createEntityManager(); EntityTransaction tx = em....
通过EntityManager的begin()、commit()和rollback()方法,可以控制事务的边界。 7. **监听器和事件**:Hibernate JPA支持实体级别的监听器和事件,如PrePersist、PostRemove等,允许在特定操作前或后执行自定义逻辑...
2. **创建Query对象**:调用EntityManager的`createQuery()`方法,传入JPQL语句。 3. **设置查询参数**:如果有参数,使用`setParameter()`方法,支持位置参数(例如`?1`)和命名参数(例如`:id`)。 4. **控制查询...
**JPA(Java Persistence API)简介** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它是Java EE和Java SE环境中处理对象关系映射(ORM)的一种规范,旨在简化...
5. **事务管理**:使用EntityManager的begin()、commit()、rollback()方法进行事务控制。 6. **JPQL查询**:使用EntityManager的createQuery()方法编写JPQL查询语句。 7. **测试代码**:展示如何在实际应用中使用...
- **RMI和JNDI**:远程方法调用(RMI)和Java命名目录接口(JNDI)的简介。 - **审查关系型数据库**:对关系型数据库的基础知识进行回顾。 - **注解参考**:EJB 3.0中使用的注解列表及其含义。 - **部署描述符参考**:...