Hibernate学习--- Session.evict()方法
2013-11-04 09:53
465 查看
但是与commit同时使用,会抛出异常 session = HibernateUtils.getSession(); tx = session.beginTransaction(); User1 user = new User1(); user.setName("李四"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //利用Hibernate将实体类对象保存到数据库中 //因为user主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入session的管理 //不会发出insert语句,但是id已经生成,session中的existsInDatabase状态为false session.save(user); session.evict(user);//从session缓存(EntityEntries属性)中逐出该对象 //无法成功提交,因为hibernate在清理缓存时,在session的临时集合(insertions)中取出user对象进行insert操作后需要更新entityEntries属性中的existsInDatabase为true,而我们采用evict已经将user从session中逐出了,所以找不到相关数据,无法更新,抛出异常。 tx.commit(); 解决在逐出session缓存中的对象不抛出异常的方法: 在session.evict()之前进行显示的调用session.flush()方法就可以了。 //利用Hibernate将实体类对象保存到数据库中 //因为user主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入session的管理 //不会发出insert语句,但是id已经生成,session中的existsInDatabase状态为false session.save(user); //flush后hibernate会清理缓存,会将user对象保存到数据库中,将session中的insertions中的user对象清除,并且会设置session中的existsInDatabase状态为false session.flush(); session.evict(user);//从session缓存(EntityEntries属性)中逐出该对象 //可以成功提交,因为hibernate在清理缓存时,在Session的insertions中集合中无法找到user对象所以不会发出insert语句,也不会更新session中existsInDatabase的状态。 tx.commit();
但是与commit同时使用,会抛出异常 session = HibernateUtils.getSession(); tx = session.beginTransaction(); User1 user = new User1(); user.setName("李四"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //利用Hibernate将实体类对象保存到数据库中 //因为user主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入session的管理 //不会发出insert语句,但是id已经生成,session中的existsInDatabase状态为false session.save(user); session.evict(user);//从session缓存(EntityEntries属性)中逐出该对象 //无法成功提交,因为hibernate在清理缓存时,在session的临时集合(insertions)中取出user对象进行insert操作后需要更新entityEntries属性中的existsInDatabase为true,而我们采用evict已经将user从session中逐出了,所以找不到相关数据,无法更新,抛出异常。 tx.commit(); 解决在逐出session缓存中的对象不抛出异常的方法: 在session.evict()之前进行显示的调用session.flush()方法就可以了。 //利用Hibernate将实体类对象保存到数据库中 //因为user主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入session的管理 //不会发出insert语句,但是id已经生成,session中的existsInDatabase状态为false session.save(user); //flush后hibernate会清理缓存,会将user对象保存到数据库中,将session中的insertions中的user对象清除,并且会设置session中的existsInDatabase状态为false session.flush(); session.evict(user);//从session缓存(EntityEntries属性)中逐出该对象 //可以成功提交,因为hibernate在清理缓存时,在Session的insertions中集合中无法找到user对象所以不会发出insert语句,也不会更新session中existsInDatabase的状态。 tx.commit();
相关文章推荐
- Hibernate学习笔记 - Session.evict(user)方法
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
- Hibernate学习笔记之Session-API实现CRUD以及get&load&merge方法
- 传智播客hibernate学习,Session的方法和关联映射
- Hibernate学习篇12——session方法之save与update
- Hibernate学习笔记(四)----核心开发接口、对象的三种状态、session常用方法
- 【学习笔记】Hibernate中对象的状态和转换以及Session的主要方法总结
- 学习hibernate(三) -- session常用方法
- SSH学习之Hibernate session的方法全集
- Hibernate学习笔记----session核心方法
- 【Hibernate学习杂记】No CurrentSessionContext configured!解决方法
- org.hibernate.Session.evict(Object object)方法的使用
- hibernate学习之session常用方法和HQL语句的学习
- Hibernate Session中flush、clear、evict方法的区别
- Hibernate中session的clear(),flush(),evict()方法详解
- Hibernate Session 方法学习笔记
- 框架学习之Hibernate 第三节 session接口以及get/load/persist方法
- (hibernate之三)session的delete方法(转的学习用)
- Hibernate学习篇11——session方法之save与persist
- Hibernate中session的clear(),flush(),evict()方法详解