Java信徒

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            2 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks

          深入淺出Hibernate P281講到使用Hibernate3的Bulk delete/update方式刪除記錄時,寫了段代碼證明這種刪除方式不能緩存同步,會從緩存中讀取出數據庫已經刪除的信息,我依葫蘆畫瓢寫了段代碼,結果與書上結論相反,
          請大家幫我看看到底怎么回事,我用的hibernate3.0,代碼如下:



          package mypack;

          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.hibernate.Transaction;
          import sessionfactory.HibernateSessionFactory;

          public class test2 {

          ?/**
          ? * @param args
          ? */


          ?public static void main(String[] args) {
          ? //儲存插入記錄的id
          ??int insertid;
          ??//新建實例
          ??TUser insertuser = new TUser();
          ??insertuser.setName("name1");
          ??insertuser.setResume("resume1");
          ??//插入實例
          ??Session session = HibernateSessionFactory.getSession();
          ??Transaction tx = session.beginTransaction();??
          ??session.save(insertuser);
          ??insertid = insertuser.getId();
          ??tx.commit();
          ??session.close();
          ??
          ??// 裝載插入的實例
          ??session = HibernateSessionFactory.getSession();
          ??TUser user = (TUser) session.load(TUser.class, new Integer(insertid));
          ??System.out.println("裝載實例成功,id==>" + user.getId());
          ??tx = session.beginTransaction();
          ??// 刪除插入的實例
          ??String hql = "delete TUser where id = "+insertid;
          ??Query query = session.createQuery(hql);
          ??query.executeUpdate();
          ??tx.commit();
          ??// 讀取刪除的實例,拋出異常
          ??user = (TUser) session.load(TUser.class, new Integer(insertid));
          ??System.out.println("讀取緩存中存放的id成功, id==>" + user.getId());
          ??// 捕捉異常
          ??try {
          ???System.out.println(user.getName());
          ??} catch (org.hibernate.ObjectNotFoundException e) {
          ???System.out.println("代碼user.getname()發生異常,因為該實例已經被刪除");
          ???System.out.println(e.toString());
          ???System.out.println("結論:Query.execxuteUpdate()方法刪除數據是緩存同步的");
          ??}
          ??session.close();
          ?}
          }


          打印信息如下:

          Hibernate: insert into tuser (name, resume) values (?, ?)
          裝載實例成功,id==>43
          Hibernate: delete from tuser where id=43
          讀取緩存中存放的id成功, id==>43
          Hibernate: select tuser0_.id as id0_, tuser0_.name as name0_0_, tuser0_.resume as resume0_0_ from tuser tuser0_ where tuser0_.id=?
          代碼user.getname()發生異常,因為該實例已經被刪除
          org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [mypack.TUser#43]
          結論:Query.execxuteUpdate()方法刪除數據是緩存同步的
          posted on 2007-01-16 18:18 庸世俗才 閱讀(860) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 神木县| 阿鲁科尔沁旗| 阳山县| 台北市| 临沧市| 天全县| 江北区| 九江县| 谷城县| 天祝| 武清区| 喀喇| 吉木乃县| 昌黎县| 望都县| 青浦区| 丹阳市| 溧阳市| 博野县| 三原县| 汶上县| 偃师市| 黑龙江省| 饶平县| 乌海市| 资阳市| 云林县| 永定县| 前郭尔| 萝北县| 安多县| 涿鹿县| 定南县| 鹤庆县| 陵水| 梅河口市| 永顺县| 苍梧县| 荣昌县| 阳山县| 广元市|