﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Java信徒</title><link>http://www.blogjava.net/xuan5272095/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 08:00:51 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 08:00:51 GMT</pubDate><ttl>60</ttl><item><title>初学Hibernate缓存,照着书上写的代码运行结果与书上不符合</title><link>http://www.blogjava.net/xuan5272095/archive/2007/01/16/94270.html</link><dc:creator>庸世俗才</dc:creator><author>庸世俗才</author><pubDate>Tue, 16 Jan 2007 10:18:00 GMT</pubDate><guid>http://www.blogjava.net/xuan5272095/archive/2007/01/16/94270.html</guid><wfw:comment>http://www.blogjava.net/xuan5272095/comments/94270.html</wfw:comment><comments>http://www.blogjava.net/xuan5272095/archive/2007/01/16/94270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xuan5272095/comments/commentRss/94270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuan5272095/services/trackbacks/94270.html</trackback:ping><description><![CDATA[
		<p>深入浅出Hibernate P281讲到使用Hibernate3的Bulk delete/update方式删除记录时，写了段代码证明这种删除方式不能缓存同步，会从缓存中读取出数据库已经删除的信息，我依葫芦画瓢写了段代码，结果与书上结论相反，<br />请大家帮我看看到底怎么回事,我用的hibernate3.0,代码如下：<br /></p>
		<hr />
		<br />package mypack; 
<p>import org.hibernate.Query;<br />import org.hibernate.Session;<br />import org.hibernate.Transaction;<br />import sessionfactory.HibernateSessionFactory;</p><p>public class test2 {</p><p> /**<br />  * @param args<br />  */ </p><br /> public static void main(String[] args) {<br />  //储存插入记录的id<br />  int insertid;<br />  //新建实例<br />  TUser insertuser = new TUser();<br />  insertuser.setName("name1");<br />  insertuser.setResume("resume1");<br />  //插入实例<br />  Session session = HibernateSessionFactory.getSession();<br />  Transaction tx = session.beginTransaction();  <br />  session.save(insertuser);<br />  insertid = insertuser.getId();<br />  tx.commit();<br />  session.close();<br />  <br />  // 装载插入的实例<br />  session = HibernateSessionFactory.getSession();<br />  TUser user = (TUser) session.load(TUser.class, new Integer(insertid));<br />  System.out.println("装载实例成功，id==&gt;" + user.getId());<br />  tx = session.beginTransaction();<br />  // 删除插入的实例<br />  String hql = "delete TUser where id = "+insertid;<br />  Query query = session.createQuery(hql);<br />  query.executeUpdate();<br />  tx.commit();<br />  // 读取删除的实例，抛出异常<br />  user = (TUser) session.load(TUser.class, new Integer(insertid));<br />  System.out.println("读取缓存中存放的id成功， id==&gt;" + user.getId());<br />  // 捕捉异常<br />  try {<br />   System.out.println(user.getName());<br />  } catch (org.hibernate.ObjectNotFoundException e) {<br />   System.out.println("代码user.getname()发生异常，因为该实例已经被删除");<br />   System.out.println(e.toString());<br />   System.out.println("结论：Query.execxuteUpdate()方法删除数据是缓存同步的");<br />  }<br />  session.close();<br /> }<br />}<br /><hr /><br />打印信息如下：<br /><br />Hibernate: insert into tuser (name, resume) values (?, ?)<br />装载实例成功，id==&gt;43<br />Hibernate: delete from tuser where id=43<br />读取缓存中存放的id成功， id==&gt;43<br />Hibernate: select tuser0_.id as id0_, tuser0_.name as name0_0_, tuser0_.resume as resume0_0_ from tuser tuser0_ where tuser0_.id=?<br />代码user.getname()发生异常，因为该实例已经被删除<br />org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [mypack.TUser#43]<br />结论：Query.execxuteUpdate()方法删除数据是缓存同步的<br /><img src ="http://www.blogjava.net/xuan5272095/aggbug/94270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuan5272095/" target="_blank">庸世俗才</a> 2007-01-16 18:18 <a href="http://www.blogjava.net/xuan5272095/archive/2007/01/16/94270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>