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 庸世俗才 閱讀(859) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 宁武县| 巫溪县| 蓝田县| 张家川| 堆龙德庆县| 炉霍县| 莱芜市| 海城市| 宜城市| 柞水县| 大宁县| 克东县| 竹山县| 宜昌市| 吉安市| 松阳县| 泗阳县| 汾阳市| 南京市| 灵宝市| 老河口市| 兴安县| 胶南市| 新巴尔虎左旗| 桑植县| 姜堰市| 咸阳市| 旌德县| 芒康县| 巨野县| 杨浦区| 巫溪县| 运城市| 洛阳市| 芒康县| 拜城县| 湖州市| 当阳市| 蕉岭县| 德钦县| 和静县|