/** update方法
* 把一个脱管态的对象转成持久态*/
/** 问题3:
* 当我们持久化一个脱管态的对象时,如果该对象被别的程序删除了,则会报错*/@Testpublic voidtest5(){
Session s2=HibernateUtil.getSession();
Transaction tx2=s2.beginTransaction();
Student student2= s2.get(Student.class, 1);//持久态
student2.setGender("female");
s2.update(student2);//把脱管态对象转成持久态
tx2.commit();
s2.close();
}/** 问题2:
* 当我们持久化一个脱管态对象时,如果在session的一级缓存之中,已经包含了有相同OID的对象,则会报错。
* 解决办法:
* 使用使用merge方法*/@Testpublic voidtest4(){
Session s1=HibernateUtil.getSession();
Transaction tx1=s1.beginTransaction();
Student studnet1= s1.get(Student.class,1);//持久态
tx1.commit();
s1.close();
System.out.println(studnet1);//脱管态:有OID,和Session没有关系
Session s2=HibernateUtil.getSession();
Transaction tx2=s2.beginTransaction();
Student student2= s2.get(Student.class, 1);//持久态
s2.update(studnet1);//把脱管态对象转成持久态
tx2.commit();
s2.close();
}/** 问题1:
* 当我们使用update持久一个脱管态对象时,就算没有修改实体对象的数据,也会执行update语句。
* 解决办法:
* select-before-update
* 配置位置:映射文件的class元素上
*
* 取值:
* true:在更新之前,执行查询
* false:在更新之前不执行查询。默认值*/@Testpublic voidtest3(){
Session s1=HibernateUtil.getSession();
Transaction tx1=s1.beginTransaction();
Student s= s1.get(Student.class,1);//持久态
tx1.commit();
s1.close();
System.out.println(s);//脱管态:有OID,和Session没有关系
Session s2=HibernateUtil.getSession();
Transaction tx2=s2.beginTransaction();
s2.update(s);//持久态
tx2.commit();
s2.close();
}