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

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


          網站導航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          Welcome here, my friend!

          常用鏈接

          留言簿(12)

          隨筆檔案(66)

          文章分類

          文章檔案(63)

          web

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 89693
          • 排名 - 647

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 内乡县| 虞城县| 普格县| 高邮市| 建德市| 盐源县| 南平市| 北碚区| 桐庐县| 淮北市| 昌邑市| 娄底市| 武隆县| 新邵县| 宣城市| 星子县| 辽宁省| 浙江省| 南和县| 陇川县| 大渡口区| 余干县| 镇宁| 毕节市| 龙口市| 阿克陶县| 梁平县| 石景山区| 罗定市| 新沂市| 花垣县| 延边| 溧阳市| 宜丰县| 东方市| 聂荣县| 威远县| 深州市| 托克托县| 辉南县| 黄山市|