不明白session.save(school);中的school和Person person = new Person();中的person有什么关系 如果person的改变会影响到school的话,那么当save(school)后没关闭session前再对person作更改的话,那么school也有了更新,而此时的school和数据库还是链接的,处于持久状态中,school的变化数据库是可以监控到的,应该讲是hibernate容器监控到了,然后hibernate容器就会自动将内存中的school和数据库中的school进行同步,所以也就必须的会执行一个Update语句了
在例如以下代码把Customer游离对象传给session2的save()方法,session2会把它当做临时对象处理,再次向数据库中插入一条Customer记录:Customer customer = new Customer();customer.setName("Tom");Session session1 = sessionFactory.openSession();Transaction tx1 = session1.beginTransaction();session1.save(customer); // 此时Customer对象的ID变为1tx1.commit();session1.close(); // 此时Customer对象变为游离对象Session session2 = sessionFactory.openSession();Transaction tx2 = session2.beginTransaction();session2.save(cutomer); // 此时Customer对象的ID变为2tx2.commit();session2.close();
如果person的改变会影响到school的话,那么当save(school)后没关闭session前再对person作更改的话,那么school也有了更新,而此时的school和数据库还是链接的,处于持久状态中,school的变化数据库是可以监控到的,应该讲是hibernate容器监控到了,然后hibernate容器就会自动将内存中的school和数据库中的school进行同步,所以也就必须的会执行一个Update语句了
不好意思, 保存的是person这个对象
session.beginTransaction();//事物开始
session.save(person);//当要提交的时候发一条insert语句
person.setPname("bbbb");//当要提交的时候发一条update语句
session.getTransaction().commit();session.beginTransaction();//事物开始
session.save(person);//当要提交的时候发一条insert语句
session.getTransaction().commit();
person.setPname("bbbb");//因为session已经提交,所以不会再发了。