熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

hibernate關系映射

2022-06-13   來源: Java開源技術 

  一對象關系 映射基礎

  對象間的基本關系

  首先我簡要闡明一下對象之間的基本關系在這以後UML的課程中也會深入的學習對象具有的四種基本關系

  關聯關系關聯關系在設計模式中是被提倡優先使用於繼承關系的關聯關系就是將一個對象做為別一個對象的成員是一種包含的關系

  依賴關系對與對象之間的方法的調用不存在包含的關系

  聚集關系這個關系比較有趣比如人的手和身體如果身體不存在了手也就不存在了是一種整個與部分的關系

  一般關系就是繼承關系

  上邊的這四種關系是對前一天的補充對象關系的映射基礎沒有涉及這些而是單一對象通過hibernate與數據庫的映射關系

  持久化類的屬性及訪問方法

  首先回顧一下持久化我們知道持久化層是從業務邏輯層中分離出來的專門用於數據庫操作的這些部分持久化層中的持久化類便是我們之前早已學習的domain類

  )持久化類的訪問者有兩個一是JAVA應用程序二是hibernate

  寫Java應用程序通過setter設置持久化對象的屬性hibernate通過getter獲取持久化對象的屬性並生成相應的SQL語句對表格進行操作

  讀hibernate通過setter設置持久化對象的屬性Java應用程序通過getter獲取持久化對象的屬性

  )基本數據類型和包裝類型

  通過前天的日志我們知道關聯對象的屬性與表格的字段是通過property元素節點設置的

  <property name=gender column=gender type=integer />

  基本的type是hibernate的類型我們在持久化類中定義的gender屬性為int定義為int類型會有什麼弊端?比如我們有個學生成績表如果某個學生沒有參加某一學科的考試但我們卻使用了int類型它的默認值為當查看學生成績時他到底是考了分還是沒有考試?所以最好將持久化類中的gender屬性定義為Integer它的默認值為null查詢成績時看到的是null那麼他肯定是沒參加考試哦!(注意數據庫中的對應字段應該為字符型)

  )hibernate訪問持久化類屬性的策略

  Hibernate通過name指定的值訪問持久化對象Hibernate通過name值反射持久化對象的對方法比如name的值為genderHibernate會直接反射持久化對象的getGender和setGender方法所以我們必須保證持久化對象中有對應的方法這是因為property有一個access屬性它的默認值為property

  如果指定access的值為field則hibernate直接根據name值反射持久化對象的屬性此時我們必須保證持久化對象中有對應的屬性

  )在持久化類的方法中加入程序邏輯

  通過)我們知道如果access的值為propertyhibernate直接反射持久化對象的方法在這個方法中我們就可以加入程序邏輯老徐舉了一個生動的例子比如Customer類中有firstname和lastname兩個屬性但我們只想讓hibernate通過getName方法獲得一個firstname+lastname的字符串此時我們就可以在getName方法中將firstname與lastname兩個屬性值合並為一個中間使用 連接的字符串返回

  使用hibernate獲取數據表中的數據時hibernate會調用持久化對象的setName方法我們在這個方法中將傳遞進來的參數使用分隔然後分別設置到firestname和lastname屬性中

  )hibernate的hql語句

  我們在使用JDBCDBUtil時使用的都是SQL語句但hibernate比較特殊它使用的是自己的一套東西叫hql語句比如我們調用sessionfind方法傳遞的hql語句為

  from customer as c where cname=itcast

  其中的customer指向持久化對象的映射文件name指向持久化對象的映射文件中的property元素的name屬性此時需要注意access屬性的值

  )設置派生屬性

  Property元素中有一個formula屬性它的值是一個sql表達式hibernate將根據此表達式計算的值設置到持久化對象的屬性上比如我們要統計訂單表中的總計

  <property name=totalprice formula=(select sum(oPRICE) from ORDERS o where oCUSTOMER_ID=ID) />


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28866.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.