hibernate对象管理的三种状态
临时状态
在hibernate没有对对象进行读写等操作上的交集,此时实体类对象处于临时状态。
例如:
User u = new User();
持久状态
//获取会话对象 Session session = SessionFactoryUtils.openSession(); //开启事务 Transaction trants = session.beginTransaction(); //懒加载,此时返回的user对象为代理对象,只有oid标识列属性有值,其余部分空值 User u = session.load(User.class, user.getId()); //在事务间访问此代理对象除了oid字段的其他属性,将会触发对象初始化操作,为对象赋上完整的字段值 // System.out.println(u); //启用hibernate的初始化操作 Hibernate.initialize(u); //提交事务 trants.commit(); //关闭会话 SessionFactoryUtils.closeSession(); // LazyInitializationException:懒(延迟)加载异常
托管状态
当hibernate执行了事务提交(commit),会话关闭(close),会话重置(clear),清除指定缓存对象(evict)时,对象由持久态转换为托管态(游离态)
不过仍然可以通过update或save等动作重新切换到持久态,而删除则直接转变为瞬时态。
User user = session.get(User.class, 6); // if(null!=user) // session.update(u); // session.merge(u);//可以同时标记相同的持久态对象 // 提交事务/回滚事务 transaction.commit(); // 关闭Session session.close();