posts - 66,  comments - 40,  trackbacks - 0
          ?

          在初學Hibernate的時候就聽說此技術對View支持的不是很好。因為我也沒有用到也就沒有多想。后來因為工程需要,不得不對此作一番研究。最終找到了一條可行的解決方案。特此總結,共大家分享。
          一、思路
          問題:
          以往用Hibernate處理View時發生的困難主要集中在這兩方面:
          View是沒有主鍵
          由于View是由select語句生成,所以不存在任何主鍵。也就無法對其映射。
          Hibernate必須對要操作的表進行po封裝
          Hibernate要求對數據庫的操作都是通過pojo映射來實現的。也就是說無法對某個View直接讀取而不對其進行映射。
          解決:
          要解決以上問題,我采取一下方案:
          在建立View的時候生成類似主鍵的字段
          通過其他手段建立類似主鍵的字段。
          在映射po的時候手動把這個字段改為主鍵
          將虛擬字段改為主鍵。根據虛擬的情況給以不同的自增長類型。
          二、實現
          我是在Oracle+Tomcat環境下測試成功的。
          下面詳細介紹一下步驟。
          建立視圖

          代碼
          createorreplaceviewv_user_perm
          (id,userid,moduleid)
          as
          selectrownum,a.id,c.id
          fromsysusera,user_permb,module c
          wherea.id=b.userid
          andb.moduleid=c.id

          這個視圖是從兩個表中分別取出id,然后我將生成的視圖的行號作為id處理。
          建立xml
          代碼
          <?xmlversion="1.0"encoding="UTF-8"?>
          <!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/Hibernate Mapping DTD 2.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
          <hibernate-mapping>
          <class name="com.fulong.journal.cad.po.perm.VUserPerm"table="V_USER_PERM"schema="JCAD">
          <idname="id"column="ID"type="long">
          <generatorclass="increment"/>
          </id>
          <property name="userid" column="USERID" type="string" length="32" not-null="true"
          />
          <propertyname="moduleid"column="MODULEID"type="string"length="32"not-null="true"/>
          </class>
          <
          /hibernate-mapping>

          建立java
          代碼

          importjava.io.Serializable;
          importorg.apache.commons.lang.builder.ToStringBuilder;

          /** @author Hibernate CodeGenerator */
          publicclass VUserPermimplementsSerializable{

          /** persistent field */
          privatelongid;

          /** persistent field */
          privateStringuserid;

          /** persistent field */
          privateStringmoduleid;

          /** full constructor */
          publicVUserPerm(Stringuserid,Stringmoduleid){
          this.userid=userid;
          this.moduleid=moduleid;
          }

          /** default constructor */
          publicVUserPerm(){
          }
          publiclonggetId(){
          returnthis.id;
          }

          publicvoidsetId(longid){
          this.id=id;
          }

          publicStringgetUserid(){
          returnthis.userid;
          }

          publicvoidsetUserid(Stringuserid){
          this.userid=userid;
          }

          publicStringgetModuleid(){
          returnthis.moduleid;
          }

          publicvoidsetModuleid(Stringmoduleid){
          this.moduleid=moduleid;
          }

          publicStringtoString(){
          returnnewToStringBuilder(this)
          .toString();
          }

          }


          這樣就一個把一個視圖當成表來查詢了。不過插入是不可能的了。&#61514;
          大家有什么看法可以一起討論。

          posted on 2006-09-12 11:22 happytian 閱讀(1746) 評論(0)  編輯  收藏

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


          網站導航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          Welcome here, my friend!

          常用鏈接

          留言簿(12)

          隨筆檔案(66)

          文章分類

          文章檔案(63)

          web

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 89348
          • 排名 - 647

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汉中市| 麦盖提县| 托里县| 台东市| 长汀县| 大理市| 山阳县| 富民县| 黔西县| 太湖县| 稷山县| 察隅县| 平南县| 章丘市| 巴马| 仙桃市| 同江市| 岑巩县| 永嘉县| 汉阴县| 蒙城县| 西安市| 彰化市| 辽阳市| 缙云县| 封丘县| 卓尼县| 保德县| 屏南县| 彭泽县| 从化市| 清新县| 富源县| 宁远县| 湖北省| 彭泽县| 肥乡县| 乌兰县| 无棣县| 滦南县| 太谷县|