merge和update的区别
先说点题外话,下面这段代码让我觉得很惊讶:
session.beginTransaction();User usr = (User)session.get(User.class, new Long(1));usr.setNickName("c");session.getTransaction().commit();session.close();
private void doMerge() {User usr = new User();usr.setOid((long)1);usr.setNickName("c++");Session session2 = HibernateSessionFactory.getSessionFactory().openSession();session2.beginTransaction();User usr2 = (User)session2.load(User.class, new Long(1));usr2.setNickName("covex");//User usr3 = (User)session2.merge(usr);session2.update(usr);session2.getTransaction().commit();session2.close();}
private void doMerge() {User usr = (User)session.get(User.class, new Long(1));session.close();usr.setNickName("456");Session session2 = HibernateSessionFactory.getSessionFactory().openSession();session2.beginTransaction();User usr2 = (User)session2.load(User.class, new Long(1));User usr3 = (User)session2.merge(usr);System.out.println(usr2 == usr3);//true。这两个引用指向同一个对象。usr2.setNickName("covex");session2.update(usr2);//usr2还是处于持久化状态,因此可以继续update操作session2.getTransaction().commit();session2.close();}