Hibernate中引用View的解決方案_來自一網友

 

一、思路
問題:
以往用Hibernate處理View時發生的困難主要集中在這兩方面:
View是沒有主鍵
由於View是由select語句生成,所以不存在任何主鍵。也就無法對其映射。
Hibernate必須對要操作的表進行po封裝
Hibernate要求對數據庫的操作都是通過pojo映射來實現的。也就是說無法對某個View直接讀取而不對其進行映射。

如果強制用hibernate反轉,會將所有的字段變成一個複合主鍵,關鍵是根本查不出數據來!
解決:
要解決以上問題,我採取一下方案:
在建立View的時候生成類似主鍵的字段,通過其他手段建立類似主鍵的字段。 並不需要另外建立這個主鍵!!!

在用Hibernate反轉後,將複合主鍵po文件中構建器及geter/seter拷貝至主po文件中。同時修改相應的hbm.xml文件,手動隨便把任一字段改爲主鍵即可。 
二、實現
建立視圖

代碼
  1. create or replace view v_user_perm   
  2. (id, userid, moduleid)                              其實id並不需要!
  3. as   
  4. select rownum,a.id,c.id   
  5. from sysuser a,user_perm b,module c   
  6. where a.id=b.userid    
  7. and b.moduleid=c.id  

這個視圖是從兩個表中分別取出id。
建立hbm.xml :

代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">  
  3. <hibernate-mapping>  
  4. <class name="com.fulong.journal.cad.po.perm.VUserPerm" table="V_USER_PERM" schema="JCAD">  
  5. <id name="id" column="ID" type="long">        <column name="JHDM" length="14" />
        <generator class="assigned" />
  6. </id>  
  7. 隨便挑以下一個屬性作主鍵即可  
  8. <id name="userid" column="USERID" type="string" length="32" not-null="true">
  9.           <generator class="assigned" />
  10. </id>  
  11. <property name="moduleid" column="MODULEID" type="string" length="32" not-null="true"/>  
  12. </class>  
  13. </hibernate-mapping>  
<script type=text/javascript>render_code();</script>
 注意:
view一般用在小涉及到多個表的組合查詢時用到
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章