Hibernate中Session的操作解释_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Hibernate中Session的操作解释
上传于||文档简介
&&H​i​b​e​r​n​a​t​e​中​S​e​s​s​i​o​n​的​操​作​解​释
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
你可能喜欢Session session =& getSession();&&&&&&&& session.beginTransaction();&&&&&&&& Query query = session.createQuery("update Useraccount set meeting=meeting+1,useMeeting=useMeeting-1 where userId=(select userId from Signup where id="+signupID+") and chargesbasis=(select a.chargesbasis& from Signup as s,Activities as a where s.id="+signupID+" and s.activitiesId=a.id)");&&&&&&&& query.executeUpdate();&&&&&&&& query=session.createQuery("delete from Signup where id="+signupID);&&&&&&&& query.executeUpdate();&&&&&&&& session.beginTransaction().commit();&&&&&&&& if(session!=null){&&&&&&&&&&&& session.close();&&&&&&&& }很简单的哈
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区
您现在的位置:&&>&&>&&>&&>&&>&正文
HibernateSession中的flush方法的作用
来源:() 【】
Hibernate Session中的 flush方法的作用: session flush方法主要做了两件事: * 清理缓存 * 执行sql session在什么情况下执行flush * 默认在事务提交时 * 显示的调用flush * 在执行查询前,如:iterate /** * 测试uuid主键生成策略 */ public void testSave1() { Session session = Transaction tx = try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); User1 user = new User1(); user.setName("李四"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //因为user的主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入到了session的管理 //不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false session.save(user); //调用flush,hibernate会清理缓存,执行sql //如果数据库的隔离级别设置为为提交读,那么我们可以看到flush过的数据 //并且session中existsInDatebase状态为true session.flush(); //提交事务 //默认情况下commit操作会先执行flush清理缓存,所以不用显示的调用flush //commit后数据是无法回滚的 tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 测试native主键生成策略 */ public void testSave2() { Session session = Transaction tx = try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); User2 user = new User2(); user.setName("张三1"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //因为user的主键生成策略为native,所以调用session.save后,将执行insert语句,返回有数据库生成的id //纳入了session的管理,修改了session中existsInDatebase状态为true //如果数据库的隔离级别设置为为提交读,那么我们可以看到save过的数据 session.save(user); tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 测试uuid主键生成策略 */ public void testSave3() { Session session = Transaction tx = try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); User1 user = new User1(); user.setName("王五"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //因为user的主键生成侧路采用的是uuid,所以调用完成save后,只是将user纳入到了session的管理 //不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false session.save(user); //将user对象从session中逐出,即session的EntityEntries属性中逐出 session.evict(user); //无法成功提交,因为hibernate在清理缓存时,在session的insertions集合中取出user对象进行insert操作后 //需要更新entityEntries属性中的existsInDatabase为true,而我们采用evict已经将user从session的entityEntries //中逐出了,所以找不到相关数据,无法更新,抛出异常 tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 测试uuid主键生成策略 */ public void testSave4() { Session session = Transaction tx = try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); User1 user = new User1(); user.setName("王五"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //因为user的主键生成侧路采用的是uuid,所以调用完成save后,考试吧提示只是将user纳入到了session的管理 //不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false session.save(user); //flush后hibernate会清理缓存,会将user对象保存到数据库中,将session中的insertions中的user对象 //清除,并且设置session中existsInDatebase的状态为true session.flush(); //将user对象从session中逐出,即session的EntityEntries属性中逐出 session.evict(user); //可以成功提交,因为hibernate在清理缓存时,在session的insertions集合中无法找到user对象 //所以就不会发出insert语句,也不会更新session中的existsInDatabase的状态 tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 测试native主键生成策略 */ public void testSave5() { Session session = Transaction tx = try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); User2 user = new User2(); user.setName("张三11"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //因为user的主键生成策略为native,所以调用session.save后,将执行insert语句,返回有数据库生成的id //纳入了session的管理,修改了session中existsInDatebase状态为true //如果数据库的隔离级别设置为为提交读,考试吧提示可以看到save过的数据 session.save(user); //将user对象从session中逐出,即session的EntityEntries属性中逐出 session.evict(user); //可以成功提交,因为hibernate在清理缓存时,在session的insertions集合中无法找到user对象 //所以就不会发出insert语句,也不会更新session中的existsInDatabase的状态 tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } }1&&&
文章责编:gaoxiaoliang& 看了本文的网友还看了
?&&( 15:51:47)?&&( 14:16:20)?&&( 14:14:40)?&&( 14:13:00)?&&( 14:10:55)?&&( 14:02:35)
? ? ? ? ? ? ? ? ? ?
? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ?
? ? ? ?
实用工具 |
| 大全 | 大全
|
版权声明:如果网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本内容,请注明出处。
Copyright & 2004-
网 All Rights Reserved
中国科学院研究生院权威支持(北京) 电 话:010- 传 真:010-Hibernate中的session.clear(),save(),和flush()的理解?_百度知道
Hibernate中的session.clear(),save(),和flush()的理解?
User user = new User(););
tx.clear();
user?我的主键策略是indentity?添加了sess.setAge(20).clear();不是把user存入缓存吗.save(user);
sess.close().在网上看了很多人都说这样的代码令狐冲",代码如下?
清空了为什么这样还能把记录添加进数据去;问题;sess.evict(user),但是我的就执行的很顺利?
2,不知道具体是怎样的.commit();
user.sess.save(user);
userUser是一个持久化类.save(user):1;
会抛异常;不是清空缓存吗.clear().setPass(&或者1434&).setName("
提问者采纳
clear() .save(user),是要看你的FlushMode是怎么设置的。清空缓存是在持久化之后进行的。至于你说的抛异常;的意思是将user持久化,要具体看是抛出什么异常了、删除的和修改的数据起作用。close() 。flush():Completely clear the session,也就是说把数据插入到数据库中。但是不一定非得关闭session:End the session by releasing the JDBC connection and cleaning up。flush必须在一个操作单元结束之后且在提交事务和关闭连接之前被调用.强制刷新流的缓冲.释放并清空JDBC连接hibernate最新发布包的javadoc里对这三个方法的解释是,不涉及查询的结果。至于要不要清空缓存,该清空操作只对于要保存的: Force this session to flush。=========================================sess。例如插入一条数据.清空session
提问者评价
你真棒,学习了
clear 清空缓存中对象; sava 将缓存中的对象持久化 保存到数据库 flush 刷新缓存
其他类似问题
为您推荐:
其他3条回答
hibernate清理缓存时更新数据到数据库的,也就是说提交事务的。
你写的不是缓存,save()方法在clear()前面,,,
save()方法在clear()前面 当然可以添加进去啊
hibernate的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}