持久态对象一个非常重要的能力:自动更新数据库。
package cn.itcast.hibernate3.demo1;import static org.junit.Assert.*;import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test;import cn.itcast.utils.HibernateUtils;/*** Hibernate的测试类* * @author zhongzh**/public class HIbernateTest1 {@Test//测试持久态的对象自动更新数据库(因为它依赖了hibernate的一级缓存区域)public void demo2() {//1.创建SessionSession session = HibernateUtils.openSession();//2.开启事务Transaction tx = session.beginTransaction();//获得一个持久态的对象Book book = (Book) session.get(Book.class, 1);book.setName("Struts2开发");//现在不用update(book)也可以自动完成数据库的更新//没有手动调用update()方法也可以完成数据库的更新//session.update(book);//之前是update(book)才能完成修改//3.提交事务 tx.commit();//4.关闭资源 session.close();}@Test//区分持久化对象的三种状态:public void demo1() {// 1.创建SessionSession session = HibernateUtils.openSession();// 2.开启事务Transaction tx = session.beginTransaction();//往数据库去保存一本图书:Book book = new Book();//book是一个持久化对象,因为book有一个实体类已经//和我们的表建立起映射了 Book是一个持久化类 一new()就是瞬时态了 //瞬时态: 没有唯一标识OID,没有与session关联.//刚new()出来,从数据库里面也不知道它是什么。它根本就没有OID,没有和session关联,是一个单独的//对象book.setName("Hibernate开发");book.setAuthor("孙XX");book.setPrice(65d);session.save(book); //持久态 往数据库一存它就有OID了,而且是和session关联。//持久态: 有唯一标识OID,与session关联.// 3.事务提交 tx.commit();//4.释放资源 session.close();book.setName("Struts2开发"); //脱管态 session关闭了,book不与session关联了。//脱管态:有唯一的标识,没有与session关联.fail("Not yet implemented");}} //******自动更新数据库的能力依赖了Hibernate的一级缓存.