Hibernate操作視圖

 映射視圖與表不同,會多生成XXXId的類,配置文件一般是聯合主鍵 如:
  1. <hibernate-mapping>
  2.  <class name="com.hhkj.workflow.bean.AllTablePb" table="V_ALLTAB_PB" schema="CANP">
  3.   <composite-id name="id" class="com.hhkj.workflow.bean.AllTablePbId">
  4.    <key-property name="owner" type="string">
  5.     <column name="OWNER" length="30" />
  6.    </key-property>
  7.    <key-property name="tableName" type="string">
  8.     <column name="TABLE_NAME" length="30" />
  9.    </key-property>
  10.    <key-property name="columnName" type="string">
  11.     <column name="COLUMN_NAME" length="30" />
  12.    </key-property>
  13.   </composite-id>
  14.  </class>
  15. </hibernate-mapping>

既然 視圖就是表,那麼在寫類和映射文件的時候,無需有什麼特別的地方,按照正常寫就可以了,
只是主鍵需要處理一下,如上如果複合主鍵中有一個值爲NULL,則 from view查詢出來的集合中都是
NULL值.此時可以採用如下配置文件方式:
  1. <hibernate-mapping>
  2.     <class name="com.hhkj.workflow.bean.AllTablePbId" table="V_ALLTAB_PB">
  3.      <id name="id" type="java.lang.String" column="ID" length="50" >  
  4.          <generator class="assigned"></generator>  
  5.      </id>  
  6.             <property name="OWNER" type="java.util.Date">
  7.                 <column name="OWNER" length="30" />
  8.             </property>
  9.             <property name="TABLE_NAME" type="java.lang.String">
  10.                 <column name="TABLE_NAME" length="30" />
  11.             </property>
  12.             <property name="COLUMN_NAME" type="java.lang.String">
  13.                 <column name="COLUMN_NAME" length="30" />
  14.             </property>
  15.     </class>
  16. </hibernate-mapping> 

此處保證id爲表中唯一字段,並且不爲null。
所以在用Hibernate對視圖進行操作的時候應該注意:要確定好複合主鍵的個數,如果將所有字段
都作爲複合主鍵.當一個爲NULL時候,from view查詢出來的集合中都是NULL值.其他操作類似Hibernate
對錶的操作。


聯合主鍵不爲NULL時,可以這樣做:
public class AllTablePb implements Serializable {
 // Fields
 private AllTablePbId id; //**********生成id的getter,setter方法
 // Property accessors
 public AllTablePbId getId() {
  return this.id;
 }
 public void setId(AllTablePbId id) {
  this.id = id;
 }
}
public class AllTablePbId implements java.io.Serializable {
 // Fields
 private String owner;
 private String tableName;
 private String columnName;
 private String dataType;
 private String pbcCnam;
 private String pbcCmnt;
 // Property accessors
 public String getOwner() {
  return this.owner;
 }
 public void setOwner(String owner) {
  this.owner = owner;
 }
 public String getTableName() {
  return this.tableName;
 }
 public void setTableName(String tableName) {
  this.tableName = tableName;
 }
 public String getColumnName() {
  return this.columnName;
 }
 public void setColumnName(String columnName) {
  this.columnName = columnName;
 }
 public String getDataType() {
  return this.dataType;
 }
 public void setDataType(String dataType) {
  this.dataType = dataType;
 }
 public String getPbcCnam() {
  return this.pbcCnam;
 }
 public void setPbcCnam(String pbcCnam) {
  this.pbcCnam = pbcCnam;
 }
 public String getPbcCmnt() {
  return this.pbcCmnt;
 }
 public void setPbcCmnt(String pbcCmnt) {
  this.pbcCmnt = pbcCmnt;
 }
}
配置文件:
<hibernate-mapping>
 <class name="com.hhkj.workflow.bean.AllTablePb" table="V_ALLTAB_PB" schema="CANP">
  <composite-id name="id" class="com.hhkj.workflow.bean.AllTablePbId">
   <key-property name="owner" type="string">
    <column name="OWNER" length="30" />
   </key-property>
   <key-property name="tableName" type="string">
    <column name="TABLE_NAME" length="30" />
   </key-property>
   <key-property name="columnName" type="string">
    <column name="COLUMN_NAME" length="30" />
   </key-property>
   <key-property name="dataType" type="string">
    <column name="DATA_TYPE" length="106" />
   </key-property>
   <key-property name="pbcCnam" type="string">
    <column name="PBC_CNAM" length="30" />
   </key-property>
   <key-property name="pbcCmnt" type="string">
    <column name="PBC_CMNT" length="254" />
   </key-property>
  </composite-id>
 </class>
</hibernate-mapping>
這樣就可以通過AllTablePb.getId()取得相關的信息。
發佈了57 篇原創文章 · 獲贊 0 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章