各位大神,请教一个关于hibernate修改数据的问题,看代码
public void addUser(){
System.out.println("begin.......");
Session session = null;
Transaction transaction = null;
session = SessionFactoryUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
System.out.println("开始修改用户信息");
User u = (User)session.get(User.class, 2);
u.setUsername("ddTest");
session.saveOrUpdate(u);
System.out.println("修改用户信息成功。。。。");
transaction.commit();
session.close();
System.out.println("end.......");
}
这样可以把一个ID为2的用户数据name改为ddTest,没有什么疑问。再看
public void addUser(){
System.out.println("begin.......");
Session session = null;
Transaction transaction = null;
session = SessionFactoryUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
System.out.println("开始修改用户信息");
User u = (User)session.get(User.class, 2);
u.setUsername("ddTest");
//session.saveOrUpdate(u);
System.out.println("修改用户信息成功。。。。");
transaction.commit();
session.close();
System.out.println("end.......");
}
这样,不用saveOrUpdate,数据一样被成功修改。这是为什么呢?是事务在提交时把一级缓存里的对像flush到数据库了吗?那如果这样的话要saveOrUpdate之类的方法还有什么用呢?求高手大神解惑,小弟在此感谢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个问题的本质是没有看hibernate的原理,想用自己写代码的方式验证一下,那么在这里我们可以多些几个测试类,关注一下
transaction.commit();
session.close();
对saveOrUpdate方法的影响!
希望能够帮助到你!