1、持久化对象
hibernate持久化对象分为3中状态:瞬时状态、持久状态、脱管状态
transient(瞬时态):尚未与Session关联对象,失去引用的话,就会被JVM回收。一般就是直接New创建的对象。
persistent(持久态):已经与当前session产生关联,并且相关联的session没有关闭,并且事务尚未提交。
detached(托管态):存在持久化OID,但没有与当前session关联,脱管状态改变hibernate不能检测到。
// 获得Session
Session session = HibernateUtils.openSession();
// 开启事务
Transaction transaction = session.beginTransaction();
Book book = new Book(); // 瞬时态(没有OID,未与Session关联)
book.setName("hibernate精通");
book.setPrice(56d);
session.save(book);// 持久态(具有OID,与Session关联)
// 提交事务,关闭Session
transaction.commit();
session.close();
System.out.println(book.getId()); // 托管态(具有 OID,与Session断开关联)
当对象的临时状态将变为持久化状态。当对象在持久化状态时,它一直位于 Session 的缓存中,对它的任何操作在事务提交时都将同步到数据库,因此,对一个已经持久的对象调用 save() 或 update() 方法是没有意义的。
Student stu = new Strudnet();
stu.setCarId(“200234567”);
stu.setId(“100”);
// 打开 Session, 开启事务
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
//将stu对象持久化操作
session.save(stu);
stu.setCardId(“20076548”);
//再次对stu对象进行持久化操作
session.save(stu); // 无效
session.update(stu); // 无效
// 提交事务,关闭 Session
transaction.commit();
session.close();