Java信徒

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            2 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks

          2007年1月16日 #

          正在看深入淺出hibernate,上面演示的用hibernate synchronizer自動生成的hibernate2版本的dao類,其中的BaseRootDAO類把getSession()方法和createSession()方法都設(shè)置為public,這樣使用session時可以直接Session session = BaseRootDAO.createSession()方法獲得。
          而我安裝了hibernate synchronizer插件生成的BaseRootDAO類沒有定義createSession()方法,getSession()方法被定義為protected,要獲得session只好新建一個DAO類實例,覺得很不方便,不知道為什么把session包裝得這樣嚴密。

          posted @ 2007-02-12 20:30 庸世俗才 閱讀(683) | 評論 (0)編輯 收藏

          深入淺出Hibernate P281講到使用Hibernate3的Bulk delete/update方式刪除記錄時,寫了段代碼證明這種刪除方式不能緩存同步,會從緩存中讀取出數(shù)據(jù)庫已經(jīng)刪除的信息,我依葫蘆畫瓢寫了段代碼,結(jié)果與書上結(jié)論相反,
          請大家?guī)臀铱纯吹降自趺椿厥?我用的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()發(fā)生異常,因為該實例已經(jīng)被刪除");
          ???System.out.println(e.toString());
          ???System.out.println("結(jié)論:Query.execxuteUpdate()方法刪除數(shù)據(jù)是緩存同步的");
          ??}
          ??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()發(fā)生異常,因為該實例已經(jīng)被刪除
          org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [mypack.TUser#43]
          結(jié)論:Query.execxuteUpdate()方法刪除數(shù)據(jù)是緩存同步的
          posted @ 2007-01-16 18:18 庸世俗才 閱讀(858) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 铜川市| 绥滨县| 望城县| 普兰店市| 台安县| 庆城县| 察哈| 凤城市| 彭州市| 萨嘎县| 神池县| 乌拉特后旗| 西贡区| 阳城县| 丹东市| 青龙| 西和县| 鞍山市| 滦南县| 和田市| 新乡市| 华安县| 南木林县| 涪陵区| 通辽市| 昌平区| 北海市| 通化县| 腾冲县| 故城县| 隆回县| 类乌齐县| 大丰市| 鹤峰县| 河间市| 宁安市| 奉贤区| 获嘉县| 湖北省| 灵川县| 仁布县|