南通优化网站收费标准,中国手工加工网免费供货,网站如何做搜索,网站怎么做地图导航对于 Hibernate 而言#xff0c;实体对象的状态分为三种#xff1a; 1.暂时态 当对象刚创建#xff0c;和 Session 没有发生任何关系时#xff0c;当程序运行完就立刻消失#xff0c;被称为暂时态。
2.持久态 持久态的对象和 Session 发生了关系#xff0c;如执行了 ses…对于 Hibernate 而言实体对象的状态分为三种 1.暂时态 当对象刚创建和 Session 没有发生任何关系时当程序运行完就立刻消失被称为暂时态。
2.持久态 持久态的对象和 Session 发生了关系如执行了 session.save()、session.get()、session.query() 等方法
Session 中会缓存该对象Session 的缓存叫一级缓存Session 获取对象时首先去查找一级缓存如果没有才查询数据库Session 要负责将持久态对象的变化更新到数据库在执行 session.flush() 时才会将更新同步到数据库中提交事务时会自动调用session.flush()
对象处于缓存中那么对象就处于持久化状态将对象从缓存中移除对象就不再处于持久化状态
3.游离态 调用了 session.evict(Object obj) 方法和 Session 解除了关系之后实体对象会被垃圾回收掉。evict() 方法用于将实体对象从 Session的一级缓存中清除出去从而及时释放它占用的内存。
测试代码
/*** Hibernate中的实体对象的三种状态暂时态、持久态、游离态** param* return* throws* author liaowenxiong* date 2022/7/2 20:21*/Testpublic void testPersistence() throws ParseException {Employee emp new Employee();emp.setName(liaowenxiong);emp.setNickname(liaowenxiong);String str 2018-08-22;SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd);Date date sdf.parse(str);emp.setHiredate(date);Timestamp timestamp Timestamp.valueOf(2017-02-23 18:25:38);emp.setEntryTime(timestamp);emp.setSalary(new BigDecimal(7899.00));emp.setAge((byte) 22); // 现在emp是暂时态Session session HibernateUtils.getSession();Transaction tx session.beginTransaction();session.save(emp); // 现在的emp是持久态因为已经将对象emp中的数据插入到数据库中了如果没有提交在数据表中是查看不到的emp.setAge((byte) 89);// 虽然emp是持久态但是并不会自动将更新同步到数据库中只有执行session.flush()才会同步到数据库中tx.commit();// commit()会调用session.flush()session.close();}