hibernate 在save的时候发update语句

J2EE 码拜 10年前 (2015-04-22) 1327次浏览 0个评论
 
	SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
		Session session=sessionFactory.getCurrentSession();
		Student s = new Student();
		s.setName("zt1");
		s.setPassword("111111");
		Transaction t = session.beginTransaction();
		session.save(s);
		//s.setName("zt3");此时只发insert
		t.commit();

控制台打印:Hibernate: insert into Student (name, password) values (?, ?)
把注释解开后

		SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
		Session session=sessionFactory.getCurrentSession();
		Student s = new Student();
		s.setName("zt1");
		s.setPassword("111111");
		Transaction t = session.beginTransaction();
		session.save(s);
		s.setName("zt3");//此时发insert后还有update
		t.commit();

控制台打印:
Hibernate: insert into Student (name, password) values (?, ?)
Hibernate: update Student set name=?, password=? where id=?
我是这么想的:一个对象在刚new出来的时候是Transient,save之后是Persistent,
commit之后Detached。Detached时,对象跟数据库没有联系,如果对象修改,需要update,变为Persistent,这时会发update语句。
我代码里的对象s在session还没有提交事务的时候修改s的name,为何还发update语句?

hibernate 在save的时候发update语句
40分
session.save(s)后对象就已经是持久态了 ,你之后修改对象的属性当然会update了
hibernate 在save的时候发update语句
如楼上所说,持久态的对象在修改时会发出update语句!
hibernate 在save的时候发update语句
楼上说的有道理

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明hibernate 在save的时候发update语句
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!