实体的高级操作
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则将持久化上下文中的实体全部转化为游离状态,此时还没有与数据库同步的实体,将不会被持久化到数据库中。
持久化上下文就是进行实体持久化交互操作时,实体所处的持久化环境。
浙公网安备 33010602011771号