EJB-- EntityManger--整理

   最近小编在看一些关于EJB的东西,发现EJB是一个门很有意思的技术,今天我想和大家聊聊EntityManger。在EJB中我们需要对Entity Bean操作(包括所有的query insert update delete操作)都需要EntityManger实例来实现。这样我们就差不多能够理解EntityManger了,他是一个对于实体操作的一个管理对象。了解EntityManager之前,我们需要先了解一下JPA规范。

  JPA: Java Persistence API 
  作用:通过JDK注解或XML描述对象--关系表的映射关系,将运行期的实体对象持久化到数据库中。
  EntityManager
  EntityManager作用是管理EntityBean,在对EntityBean进行操作的时候调用API实现对于实体的操作。
  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)
应用托管的EntityManager实现:
@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使用。

-------------------------------------有不准确的地方欢迎大家指正---------------------------------------

你可能感兴趣的:(EJB-- EntityManger--整理)