JPA 学习日志3

来源:互联网 发布:小学生模拟考试软件 编辑:程序博客网 时间:2024/06/06 01:38

三、几个常用的接口和类

1.       EntityManagerFactory->EntityManager->begin事务(事务增、删、改时必须使用)

  相当于SessionFacotry->session->begin事务

    @Test

    public void save() {//保存

       EntityManagerFactory factory = Persistence.createEntityManagerFactory("itcast");

       EntityManager em = factory.createEntityManager();

       em.getTransaction().begin();//读取不要事务,添加、更新、删除需要事务

       em.persist(new Buyer("susen","1234","ss@ss.com"));

       em.getTransaction().commit();

       em.close();

       factory.close();

    }

 

n         em.persist();//持久化,保存

n         em.remove();//删除

n         em.find(Buyer.class, "susen");//第一个参数是类,第二个参加通过主键的内容查找

n         em.clear();//使实体对象变成游离状态,修改内容不能更新到数据库

n         em.merge();//更新,将游离状态更新(同步)到数据库

n         em.refresh();//如果数据库中的内容被改变后,我们在程序中可以用这个,得到最新的数据不能再次调用find方法,因为find方法会从em的一级缓存中取出未更新前的数据。

2.       实体对象拥有以下4个状态,这些状态通过调用EntityManager接口方法发生迁移:

n         新建态:新创建的实体对象,尚未拥有持久化主键,没有和一个持久化上下文关联起来;

n         受控态:已经拥有持久化主键并和持久化上下文建立了联系;

n         游离态:拥有持久化主键,但尚未和持久化上下文建立联系;

n         删除态:拥有持久化主键,已经和持久化上下文建立联系,但已经被安排从数据库中删除。

 

3.       EntityManager API

 

    下面是EntityManager的一些主要的接口方法:

 

n         void persist(Object entity)

 

    通过调用EntityManagerpersist()方法,新实体实例将转换为受控状态。这意谓着当persist ()方法所在的事务提交时,实体的数据将保存到数据库中。如果实体已经被持久化,那么调用persist()操作不会发生任何事情。如果对一个已经删除的 实体调用persist()操作,删除态的实体又转变为受控态。如果对游离状的实体执行persist()操作,将抛出 IllegalArgumentException

 

    在一个实体上调用persist()操作,将广播到和实体关联的实体上,执行相应的级联持久化操作;

 

n         void remove(Object entity)

 

    通过调用remove()方法删除一个受控的实体。如果实体声明为级联删除(cascade=REMOVE 或者cascade=ALL ),被关联的实体也会被删除。在一个新建状态的实体上调用remove()操作,将被忽略。如果在游离实体上调用remove()操作,将抛出 IllegalArgumentException,相关的事务将回滚。如果在已经删除的实体上执行remove()操作,也会被忽略;

 

n         void flush()

 

    将受控态的实体数据同步到数据库中;

 

n         T merge(T entity)

 

    将一个游离态的实体持久化到数据库中,并转换为受控态的实体;

 

n         T find(Class entityClass, Object primaryKey)

 

    以主键查询实体对象,entityClass是实体的类,primaryKey是主键值,如以下的代码查询Topic实体:

 

    Topic t = em.find(Topic.class,1);

原创粉丝点击