public void testUpdateStu() {
Configuration cfg = new AnnotationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
Student s = (Student) session.load(Student.class,36);
s.setName("zhou");
s.setAge(28);
Transaction tx = session.beginTransaction();
//session.update(s);
//session.save(s);
//session.persist(s);
tx.commit();
session.close();
}
问题一本来想做update操作的,但把update注释掉了,为什么还能执行成功,并改变了数据库数据?问题二为什么此代码中的update方法和save方法执行后所得到的结果一样? 问题三此代码中update方法和persist方法的区别?
Configuration cfg = new AnnotationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
Student s = (Student) session.load(Student.class,36);
s.setName("zhou");
s.setAge(28);
Transaction tx = session.beginTransaction();
//session.update(s);
//session.save(s);
//session.persist(s);
tx.commit();
session.close();
}
问题一本来想做update操作的,但把update注释掉了,为什么还能执行成功,并改变了数据库数据?问题二为什么此代码中的update方法和save方法执行后所得到的结果一样? 问题三此代码中update方法和persist方法的区别?
解决方案 »
- java comlib 短信猫发送短信报错 重复发送端口被占用 如何释放呢?高手请进来帮帮忙。
- java 监控程序
- WANdisco multisite怎么用?
- J2EE技术研究,OOA/D探讨,UML使用交流群5415031,需有1年以上的工作经验
- 想知道Jakarta Commons DBCP与Proxool的比较
- 怎么改变JDeveloper中new File("notes.txt")出来的notes.txt的所在目录啊?
- 100分求解!JSP用户多导致TomCat瘫痪的问题!万分着急,拜托了!
- !!!(@_@)文件上传为何不能大于4k啊???错在那里了???
- 数据库查询结果分页显示问题
- java问题
- java jdbc-odbc连excel 文字被截断
- 关于hibernate的查询问题,在线请教高手来解答
Configuration cfg = new AnnotationConfiguration();
SessionFactory sf = chinese wholesalers
ugg).buildSessionFactory();
Session session = sf.openSession();
Student s = (Student) session.load(Student.class,36);
s.setName("zhou");
s.setAge(28);
//session.update(s);
//session.save(s);
//session.persist(s);
tx.commit();
session.close()
你这样,Student 值还能改变?是不是真的啊。
2.为什么此代码中的update方法和save方法执行后所得到的结果一样?
离谱,咋可能,如果执行save,程序肯定报错啦,除非你没有设置主键,3.persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。
update是把一个脱管状态的对象或自由态对象(一定要和一个记录对应)更新到数据库
Student s = (Student) session.load(Student.class,36);
得到的对象是持久化对象,也就是说hibernate 会检测它,一旦有改变会立即更新到数据库。所以即使不显示地调用
//session.update(s);
//session.save(s);
也会写数据库的。
2
update 是更新,你数据库要有这条记录。
save 的话可以更新和保存,在新增对象的时候只能用它。
对于已经保存了的数据,save于update基本是一样的。
另外,save 和update都有persist的效果。也就说一个非持久态的对象,在执行save 或update后就会变成持态纳入hibernate容器管理。
一、当你openSession()后,获取Student对象,这个时候Student对象就处于持久化状态,也就是说这个时候你对这个对象的任何操作都是持久的,都会影响到数据库,如果这时候改变对象的主键就会出错。当session.close()之后,对象处于游离状态,这时候操作对象就不会影响到数据库,除非把这对象再次转换到持久状态。
二、要注意现在Student对象是持久状态下的对象。save方法不会有区别。除非你再new 一个新的Student对象,这个新的Student对象就是临时状态。设置同样的值再save,这时会保存一个新的Student对象,这个新的Student对象又会转换成持久状态。
三、persist把实例持久化,主键可能会延迟。update是更新。