本章重点讲述Hibernate对象的三种状态以及如何配置二级缓存
有关Hibernate的三种状态如何相互转换网上都能查到,官方文档描述的也比较详细。这里主要是针对几个重点方法做代码演示。
一、状态转换
package learnhow; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import util.HibernateUtil; import model.example.User; public class HibernateTest { private Session session; private Transaction transaction; @Test public void testSaveOrUpdate() { session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); // Transient状态:session缓存和数据库中都没有 User user = new User(); user.setUserName("Linda"); session.save(user); // Persistent状态:save()方法以后,对象获得id并且在session中保留有引用 user = (User) session.get(User.class, 1); transaction.commit(); session.close(); // Detached状态:session被关闭,数据库和内存中有对象 user.setUserName("John"); session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); // Persistent状态:此时如果使用save()方法,Hibernate会抛出异常,使用update()方法可以更新数据库数据 session.update(user); // Transient状态:数据库和session缓存中都删除对象,此时对象有id值,但依然属于T状态 session.delete(user); transaction.commit(); session.close(); user.setUserName("Bob"); // Transient状态:有id值的T对象为了防止冲突,应该把id值重置 user.setId(0); session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); // Persistent状态:重新将对象持久化 session.saveOrUpdate(user); transaction.commit(); session.close(); } }