go4it

just do it

实体的高级操作

1.通过getReference()捕获异常

Customer customer=null;
try{
   customer=em.getReference(Customer.class,new Integer(1));
}catch(EntityNotFoundException e){
  //自定义捕获异常
}

 

2.同步数据库

  当调用persist,merge,remove方法时只是改变了实体所处的状态,但并没有保存到数据库当中。

  最终将实体保存到数据库中的是flush方法。

@PersistenceContext
protected EntityManager em;

public Customer addCustomer(Customer customer){
     em.persist(customer);
    customer.setAsset(new Double(1001.0));
     return customer;
  }

 

假设保存是asset的值为1000.0,在调用了addCustomer方法后,数据库中的asset的值并不是1000.0,而是1001.0。

因为当方法结束后,EntityManager发现托管状态下的customer实例对象的状态发生了变化,自动调用了flush方法,将最新的实体状态保存到数据库中。

 

FlushModeType默认是AUTO,实体管理器会自动在合适的时机自动调用flush方法,同步更新数据库。用户根本不用显示调用flush方法;

COMMIT方式:当一个事务结束后,才会调用flush方法。

一般建议自己不要调用flush方法,而将同步数据库的操作交给实体管理器自动管理,除非需要强制保存数据时才调用。

 

3.refresh和clear方法

   refresh将数据库中的数据读入到实体中

   clear则将持久化上下文中的实体全部转化为游离状态,此时还没有与数据库同步的实体,将不会被持久化到数据库中。

持久化上下文就是进行实体持久化交互操作时,实体所处的持久化环境。

posted on 2009-01-23 15:13  cxccbv  阅读(248)  评论(0)    收藏  举报

导航