Hibernate_6_session的管理

来源:互联网 发布:lte网络结构优化 编辑:程序博客网 时间:2024/06/07 19:36

session的管理:

1)save():把临时状态变为持久化状态(交给Sessioin管理)

Session session = sessionFactory.openSession();session.beginTransaction();// --------------------------------------------User user = new User(); // 临时状态user.setName("test");session.save(user); // 变为了持久化状态// --------------------------------------------session.getTransaction().commit();session.close();user.setName("李四"); // 游离状态System.out.println(user.getName()); // 游离状态

2update():把游离状态变为持久化状态

     在更新时,对象不存在就报错

 session.clear(); // 清除Session中所有的对象 session.evict(user); // 清除Session中一个指定的对象

3saveOrUpdate():把临时或游离状态转为持久化状态

  在更新时,对象不存在就报错

  本方法是根据id判断对象是什么状态的:如果id为原始值(对象的是null,  

  原始类型数字是0)就是临时状态,如果不是原始值就是游离状态。

User user = new User(); user.setId(3); // 自己生成一个游离状态对象 user.setName("newName"); session.saveOrUpdate(user);//持久化对象

4)delete():把持久化或游离转为删除状态

  如果删除的对象不存在,就会抛异常

5get():获取数据,是持久化状态

   会生成:select ... where id=?

  会马上执行sql语句

  如果数据不存在,就返回null

6load():获取数据,是持久化状态

   load()后返回的是一个代理对象,要求类不能是final的,否则不能生成子

   类代理,就不能使用懒加载功能了。

   让懒加载失效的方式:

   一、把实体写成final的;

   二、在hbm.xml中写<class ... lazy="false">

     不会马上执行sql语句,而是在第1次使用非idclass属性时执行sql

     如果数据不存在,就抛异常:ObjectNotFoundException

 

7)操作大量数据,要防止Session中对象过多而内存溢出

for (int i = 0; i < 30; i++) {User user = new User();user.setName("测试");session.save(user);if (i % 10 == 0) {session.flush(); // 先刷出session.clear(); // 再清空}}  user = (User) session.get(User.class, 5); // 持久化  // 刷新Session缓存中对象的状态,即重新select一下  上session.refresh(user); 





        

   





2 0