Hibernate对象的状态,session的clear()和evict()

来源:互联网 发布:1936奥运会知乎 编辑:程序博客网 时间:2024/05/21 15:48







public class PersonTest {private static SessionFactory sessionFactory = null;static{Configuration configuration = new Configuration();//加载配置文件,路径为classPath下的,名字为hibernate.cfg.xml"的文件configuration.configure();//configuration.configure("/com/xxc/test/hibernate.cfg.xml");sessionFactory = configuration.buildSessionFactory();}/** * 添加一个person */@Testpublic void savePerson(){Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Person p = new Person();p.setPname("xxc1");p.setPsex("man1");//执行save语句的时候,就是将临时状态对象改成和session有关系的持久化状态,但是并不是马上执行insert语句session.save(p);//因为修改的是持久化状态对象,所以不需要update语句,当事务提交的时候会执行update语句p.setPsex("女");/** * 在commit的时候会发生如下两句sql操作 * 由save引起的:insert into Person (pname, psex, pid) values (?, ?, ?)  * 由update引起的:update Person set pname=?, psex=? where pid=? */transaction.commit();session.close();}/** * 修改一个person */@Testpublic void editPerson(){Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();//操作持久化状态的数据,修改了其中的属性,不需要update就能同步到数据库Person person = (Person)session.get(Person.class, 1L);person.setPname("皮卡丘111");//这句话在这里相当于废话//session.update(person);transaction.commit();session.close();}@Testpublic void editPerson2(){Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Person p1 = new Person();//临时状态p1.setPname("p1");//临时状态p1.setPsex("man1");//临时状态session.save(p1);//持久化状态transaction.commit();session.close();//关闭session//重新开启一个sessionsession = sessionFactory.openSession();//重新开启一个事务transaction = session.beginTransaction();//将p1对象的属性改变,但是此时的p1对象对于当前的session来说,p1是个临时对象,所以在事务提交的时候并不会执行update语句p1.setPname("p2");p1.setPsex("man2");//session.update(p1);//只有写了这句话,才会将p1对象与新的session关联起来,使p1成为持久化状态transaction.commit();session.close();}@Testpublic void testClear(){Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Person p1 = new Person();//临时状态p1.setPname("p1");//临时状态p1.setPsex("man1");//临时状态session.save(p1);//持久化状态session.clear();//清空session中所有的对象transaction.commit();//所以所这里不会进行insert操作了session.close();}@Testpublic void testEvict(){Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Person p1 = (Person) session.get(Person.class, 1L);//持久化状态p1.setPsex("不男不女");session.evict(p1);//将session中将持久化状态的p1对象改编成临时状态对象session.update(p1);//将p1对象从临时化状态改为持久化状态transaction.commit();session.close();}}

原创粉丝点击