day35-hibernate映射 03-Hibernate持久态对象自动更新数据库
持久态对象一个非常重要的能力:自动更新数据库。
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.创建Session Session 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.创建Session Session 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的一级缓存.