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 閱讀(1745) 評論(0)  編輯  收藏

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


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

          Welcome here, my friend!

          常用鏈接

          留言簿(12)

          隨筆檔案(66)

          文章分類

          文章檔案(63)

          web

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 89329
          • 排名 - 647

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 勐海县| 大港区| 宾阳县| 磐安县| 阳城县| 田阳县| 都兰县| 闸北区| 山东省| 蓬安县| 新蔡县| 定安县| 漳浦县| 宁德市| 景宁| 隆化县| 昌都县| 达孜县| 阳谷县| 凉城县| 洱源县| 郴州市| 东台市| 澄迈县| 门头沟区| 榆中县| 梨树县| 崇州市| 长治县| 寿宁县| 嘉禾县| 衡南县| 左贡县| 尖扎县| 阿尔山市| 博野县| 高邮市| 花莲市| 城固县| 漯河市| 新巴尔虎右旗|