//此时的user为托管状态
User user = getUser();
user.setName("temp");
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.merge(user);
//此时的user为托管状态
user.setName("temp2");
transaction.commit();
session.close();
调用merge你的对象还是托管状态,此时temp修改成功,但是temp2没修改成功,
merge之后user为托管状态,hibernate检测不到他的变化
调用saveOrUpdate你的对象是持久状态,此时temp修改成功,temp2也修改成功。
save还是update,hibernate是根据id和version值来判断是save还是update,如果id有值则为update方法,如果id没有值则调用save方法。
当一个对象为托管状态时调用update方法,为持久状态时调用set方法。