最近小编在看一些关于EJB的东西,发现EJB是一个门很有意思的技术,今天我想和大家聊聊EntityManger。在EJB中我们需要对Entity Bean操作(包括所有的query insert update delete操作)都需要EntityManger实例来实现。这样我们就差不多能够理解EntityManger了,他是一个对于实体操作的一个管理对象。了解EntityManager之前,我们需要先了解一下JPA规范。
JPA:Java Persistence API
作用:通过JDK注解或XML描述对象--关系表的映射关系,将运行期的实体对象持久化到数据库中。
EntityManager
EntityManager
EntityManager作用是管理EntityBean,在对EntityBean进行操作的时候调用API实现对于实体的操作。
EntityManager分类
容器托管的EntityManager对象和应用托管的EntityManager对象
EntityManager分类
容器托管的EntityManager对象和应用托管的EntityManager对象
容器托管:这里的EntityManager不需要程序员去管理,它交由容器管理,容器去控制它的释放和连接以及失误的复杂问题,这样就会简化程序员的工作,但是容器托管的EntityManager只能在EJB容器中运行。
应用托管:程序员需要去管理它的释放、连接和控制事务,他可以在EJB中应用,也可以脱离EJB容器,在任何的Java环境中运行,所以这种管理方式风基础一些,它可以独立于EJB环境运行。
下面是应用托管的EntityManager对象和容器托管的EntityManager对象的对比:
| 种类 | 应用托管的EntityManager | 容器托管的EntityManager |
| 获得方式 | JNDI获得 、EntityManagerFactory创建 | @PersistenceContex注入 |
| 支持事务 | JTA RESOURCE_LOCAL | JTA |
| 运行环境 | web容器(t omcat ),EJB容器,J2SE环境 | EJB容器(JBoss) |
@Stateless(name="StudentManager")
@Remote
public class StudnetManagerImpl implements StudentManager{
@PersistenceUnit(unitName="test")
private EntityManagerFactory factory;
public void addStudent(String name){
EntityManager em= factory.createEntityManager();
Student s= new Student();
s.setName(name);
//实体持久化
em.persist(s);
em.close();
}
}
容器托管的EntityManager实现:@Stateful
@Remote
public class StudnetManagerImpl implements StudentManager{
@PersistenceContext(unitName="test",type=PersistenceContextType.EXTENDED)
private EntityManager em;
public void addStudent(Student student){
//实体持久化
em.persist(student);
em.close();
}
}总结:
关于EntityManager宏观上的一些理解是这些,我们出了这些理论性质的东西,还需要去实践,写一篇和大家分享一些关于EntityManager使用。
-------------------------------------有不准确的地方欢迎大家指正---------------------------------------
本文详细介绍了Java Persistence API中的EntityManager概念,探讨其在实体Bean操作中的角色,包括应用托管与容器托管的区别及其实现方式。
258





