持久化状态与hibernate语句执行顺序

来源:互联网 发布:在国外如何淘宝买东西 编辑:程序博客网 时间:2024/06/05 08:59

1.对象的状态和save与saveOrUpdate

  1. 瞬间对象的save与saveOrUpdate
public void testDuixiang(){Session session = HibernateUtil.getSession();// 创建及开启事务对象*/Transaction tran = session.beginTransaction();try {User user = new User();user.setId(3);user.setUserName("shaxuan");user.setPassword("abc");user.setTrueName("杨紫萱");session.save(user);//如果是瞬间对象,对象有木有id都会save//如果瞬间对象有id,根据id 直接update数据库;//如果瞬间对象无id,save对象到数据库session.saveOrUpdate(user); tran.commit();} catch (HibernateException e) {tran.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession(session);}}

2.持久化对象的save与saveOrUpdate
User user = (User)session.get(User.class, 3);user.setPassword("sunhuimingzxc");//session.save(user);//持久化对象save方法不会重新保存一个新对象,会执行update操作,saveOrUpdate同理//同理session.saveOrUpdate(user); 

2.save与persist,update与merge

1.save与persist:基本相同,使用时没有区别;

2.update与merge://当内存中有两个id相同的对象时,update瞬时对象报错,用merge就不会报错

例子:

@Testpublic void testPersistAndMerge(){Session session = HibernateUtil.getSession();// 创建及开启事务对象*/Transaction tran = session.beginTransaction();//瞬时对象User user1 = new User();user1.setId(4);user1.setUserName("zhaozhao");user1.setPassword("zhaozhao");user1.setTrueName("zhaozhao");try {User user2 = (User)session.get(User.class, 4);//session.update(user1); //当内存中有两个id相同的对象时,update瞬时对象报错session.merge(user1);//用merge就不会报错tran.commit();} catch (HibernateException e) {tran.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession(session);}}

3.insert,update,delete的执行顺序

当代码中执行到save或update等语句的时候不会立即变更,会在提交事务的时候向数据库发送sql执行变更,变更顺序为:insert  update  delete,与代码顺序无关
如果要按照代码顺序执行的话,使用session.flush()
@Testpublic void testOrder(){Session session = HibernateUtil.getSession();// 创建及开启事务对象*/Transaction tran = session.beginTransaction();//瞬时对象User user1 = new User();user1.setUserName("zhaozhao");user1.setPassword("zhaozhao");user1.setTrueName("zhaozhao");try {//hibernate会将要变更的内容放到缓存中,形成队列,当提交事务后,执行语句的顺序为:insert  update   delelte,与代码顺序无关,若要按照代码顺序执行,//使用Session.flush()刷新,将需要先执行的代码先执行。session.delete(session.get(User.class, 4));//Session.flush();User user = (User)session.get(User.class, 8);user.setPassword("llllllll");session.update(user);//Session.flush();session.save(user1);tran.commit();} catch (HibernateException e) {tran.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession(session);}}









原创粉丝点击