目录:
1、对象的三种状态
对象的三种状态
1)瞬时态(或临时态): 没有与Hibernate产生关联,与数据库中的记录没有产生关联(有关联就是与数据库中的 id 有关联)
2)持久态: 与Hibernate有关联,与数据库有关联(对象有 id)
3)游离态(或托管态): 与Hibernate没有关联,与数据库有关联(对象有 id)
如何判断:
1)对象有 id <==> 与数据库有关联
2)使用 session 操作过 对象 <==> 与 Hibernate 有关联
HibernateUtils
package com.oy.helloworld; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { // 会话工厂,整个程序只有一份。 private static SessionFactory sf; static { // 1 加载配置 Configuration config = new Configuration().configure(); // 2 获得工厂 sf = config.buildSessionFactory(); // 3 关闭虚拟机时,释放SessionFactory Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { public void run() { System.out.println("虚拟机关闭!释放资源"); sf.close(); } })); } // 获得一个新的session public static Session openSession() { return sf.openSession(); } // 获得当前线程中绑定session public static Session getCurrentSession() { return sf.getCurrentSession(); } }
测试代码
public class TestHelloWorld { @Test public void fun1() { Session session = HibernateUtils.openSession(); session.beginTransaction(); // =========================================== User u = new User(); // 临时态 u.setUsername("tom"); // 临时态 u.setPassword("333"); // 临时态 // save 方法会使用主键生成策略,为 User 指定 id session.save(u); // 持久态: 与Hibernate有关联,与数据库有关联(对象有 id) // =========================================== session.getTransaction().commit(); // 持久态 session.close(); // 游离态 } }
@Test public void fun2() { Session session = HibernateUtils.openSession(); session.beginTransaction(); // =========================================== User u = (User) session.get(User.class, 1); // 持久状态 u.setUsername("jerry"); session.update(u); // 多余代码,Hibernate会自动将持久化状态对象的变化同步到数据库中,无需该代码 // =========================================== session.getTransaction().commit();// 持久状态,打印update语句 session.close(); // 游离状态 }
2、
---