亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

開源框架Hibernate 3 的Formulas(圖)

2019-11-18 12:57:25
字體:
來源:轉載
供稿:網友

  Hibernate 和SPRing是越來越來的J2EE應用程序使用的兩個突出的開源框架。雖然他們面向的是不同問題,但是他們都有共同的要害特征:依靠注射。在返回對象給客戶之前,Spring建立對象之間的依靠關系,這樣減少了在使用這些對象的客戶中的大量代碼。Hibernate專門在返回一個完整的對象模型給客戶之前挑選出數據模型和對象模型之間的依靠關系。當直接使用JDBC來映射數據模型到對象模型的時候,我們通常需要寫大量的代碼來建立對象模型。Hibernate減少了這部分這樣的編碼工作。
  
  Hibernate2.x 提供了基本的表到表的映射,正常的關聯映射(包括一對一,一對多,多對多關系),多態映射,等等。Hibernate3.x通過formula, filter, subselect來增強映射的靈活性,把這些映射提個到另一高度。
  
  在本文中,我們將要向你展現formula的各種特征是如何輔助模式轉換的。在Hibernate3.x之前,formula的屬性僅僅出現在一個property元素中。Hibernate3.x在保持原來用法的同時,還提供了一個formula的屬性或元素(兩者在formula的使用方面都是等價的),能夠用于任何元素中,包括discriminator, many-to-one, one-to-one, element, many-to-many, map-key, map-key-many-to-many, 和 property。這將給對象關系映射(O-R)增加非常大的靈活性,并且可以對復雜的數據模型進行更加精致的解釋。
  
  兩種必須使用formula的主要情景是:
  
  1.需要使用formula計算結果的情形。帶有元素discriminator, element, map-key, map-key-many-to-many, 和 property的formula歸為這一類。
  
  2.需要使用formula來進行連接操作的情形。在元素many-to-one, one-to-one, 和 many-to-many中使用的formula歸為這一類。
  
  第一類:通過公式計算結果
  
  識別器
  
  在實際的數據模式中,經常存在使用一個表來描述另一個表的情況。formula能夠有助于在O-R映射中提供靈活的多態。
  
  在圖1例子中,有兩個表ProdUCt和ProductRelease。每一個Product的記錄都在ProductRelease有一個ProductReleaseID的引用,包括產品發布名稱,類型,發行日期等。
  
 開源框架Hibernate 3 的Formulas(圖)(圖一)

  
圖1.產品和產品發布數據模型

  
  在表ProductRelease中有一個讓人感愛好的屬性是SubProductAllowable,它的值要么是0,要么是1。值1就意味著這個產品發布下的任意產品答應有子產品,而值0則意味著不答應這樣的子產品。例如,一些產品是從多個子產品裝配而來的,而另一些產品,他們單獨地成為獨立的單元。
  
  圖2展現了一個解釋這種數據模式的對象模型。Nested的接口定義了getSubProducts和setSubProducts方法。類NestedProduct擴展了基類Product,也實現了接口Nested。產品數據記錄是一個Product還是一個NestedProduct,依靠于產品相應的產品發布記錄的域SubProductAllowable的值。
  
 開源框架Hibernate 3 的Formulas(圖)(圖二)

  
圖2.產品和產品發布對象領域模型
  

  為了實現這個模型轉換,使用下面的Hibernate3.x的映射:
  
  <hibernate-mapping> <class name="Product"     discriminator-value="0" lazy="false">  <id name="id" type="long"/>      <discriminator     formula="(select pr.SubProductAllowable         from ProductRelease pr         where pr.productReleaseID=            productReleaseID)"    type="integer" />  <subclass name="NestedProduct"     discriminator-value="1"/> </class></hibernate-mapping>
  
  假如formula表達式計算的結果是0,也就是說,該產品不存在子產品,那么,該對象就是類Product的實例。假如結果是1,那么對象就是類NestedProduct的實例。 在表1和2中,對于表Product中的第一個記錄(ProductID=10000001),因為它引用了一個有著SubProductAllowable=1的ProductRelease產品記錄,所以,初始化的類將是NestedProduct。而在產品Product表中的第二個記錄(ProductID=20000001),因為它引用了有著SubProductAllowable=0的表ProductRelease的記錄,所以,初始化類將會是Product。
  
 開源框架Hibernate 3 的Formulas(圖)(圖三)

  
表1.表ProductRelease中的記錄

  
 開源框架Hibernate 3 的Formulas(圖)(圖四)

  
表2表Product中的記錄

  
  Property
  
  Property元素中的formula答應對象屬性包含某些衍生值,像sum, average, max,等計算的結果,
  
  例如:
  <property name="averagePrice" formula="(select avg(pc.price) from PriceCatalogue pc, SelectedItems si where si.priceRefID=pc.priceID)"/>
  
  而且,formula也有助于從另一表中通過當前記錄的某個屬性值來獲取數據。例如:
  <property name="currencyName" formula="(select cur.name from currency cur where cur.id= currencyID)"/>
  
  這有助于從表currency中檢索currency名稱。正如你看到的那樣,這些直接映射能夠省下許多轉換的代碼。
  
  map-key
  
  formula答應map-key擁有任何可能的值。在下面的例子(圖3)中,我們將Role_roleID作為對象模型(圖4)的map-key。
  
 開源框架Hibernate 3 的Formulas(圖)(圖五)

  
圖3.User Role數據模式

  
 開源框架Hibernate 3 的Formulas(圖)(圖六)

  
圖4.User Role對象模型

  
  在上面的數據模型中,User和Role通過一個叫做User_has_Role的關系表連接成多對多(many-to-many)關系。為了獲得一個User及其所有與之關聯的Roles,我們可以使用下面的映射:
  
  <hibernate-mapping> <class name="User">  <id name="userID"/>  <map name="roles"     table="UserRole"/>   <key column="User_userID"/>   <map-key     formula="Role_RoleID"     type="string"/>   <many-to-many     column="Role_RoleID"    class="Role"/>  </map> </class> <class name="Role">  <id name="roleID"/> </class></hibernate-mapping>
  
  Role_RoleID被用來作為many-to-many元素的連接域的值。然而,Hibernate并不答應Role_RoleID同時出現在map-key和many-to-many中。但是,使用formula,Role_RoleIDf卻也能夠用于map-key中。
  
  另一種情景:element, map-key-many-to-many, 及其它與property一樣,element能夠被賦給任何有效formula表達式的運算值。
  
  帶有map-key-many-to-many的formula的使用,類似于帶有map-key的formula。然而,map-key-many-to-many經常使用在三重關系中。在三重關系中,一個映射的鍵本身是被參照的對象,而不是一個被參照的屬性。
  
  然而,有幾種formula不支持的情形。一些數據庫(例如Oracle 7)不支持嵌入SQL語句(這就是說,在SQL語句的select部分嵌入SQL語句),在這種情況下,不支持使用formula來計算結果。因此,你需要首先檢查是否支持嵌入SQL語句。
  
  由于來自于Hibernate映射的SQL使用formula表達式作為它的select目標結果的表達式部分,所以,知道一些你所使用的數據庫SQL語句的知識,將有助于你使用formula,盡管這會減少代碼的移植性。
  
  第二種情形:使用formula來連接
  
  多對一
  
  另一個在實際中常見的數據模型是屬性關系映射(proprietary relationship mapping),也就是除了基本的一對一,一對多,多對多關系而外的映射關系。formula是一個用于這種屬性關系治理的元素之一。圖5展現了一個例子,在這個例子中,一個公司可能有許多聯系人,但是他們中僅僅只有一個是缺省的聯系人。有許多聯系人的公司是典型的一對多關系。然而,為了標識缺省聯系人,表ContactPerson使用屬性defaultFlag來標識他們(1表示是,0表示不是)。
  
 開源框架Hibernate 3 的Formulas(圖)(圖七)

  
圖5.用戶角色數據模式

  
開源框架Hibernate 3 的Formulas(圖)(圖八)

  
圖6. 用戶角色對象模型

  
  為了解釋在對象模型中(圖6)缺省聯系人關系,我們使用下面的映射:
  
  <hibernate-mapping> <class name="Company" table="Company">  <id name="id" />  <many-to-one    name="defaultContactPerson"    property-ref="defaultContactPerson">    <column name="id"/>    <formula>1</formula>    </many-to-one> </class> <class name="Person" >  <id name="id" />  <properties name="defaultContactPerson">    <property name="companyID" />    <property name="defaultFlag" />  </properties> </class></hibernate-mapping>
  
  上面,我們將companyID和defaultFlag分組到名為defaultContactPerson的properties元素中,它構成了表Person的唯一鍵值。在Company類中的many-to-one元素與類Person中的defaultContactPerson properties元素相連接。最后的SQL語句如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩在线一区| 91高清在线免费观看| 欧美国产日韩xxxxx| 欧美电影免费播放| 欧美整片在线观看| 97人人做人人爱| 亚洲精品中文字幕女同| 91社区国产高清| 中文字幕久久久av一区| 欧美一性一乱一交一视频| 91在线直播亚洲| 日韩最新免费不卡| 欧美国产极速在线| 亚洲va男人天堂| 欧美日韩在线免费观看| 国产一区二区三区中文| 亚洲视频综合网| 国产视频精品免费播放| 性金发美女69hd大尺寸| 18久久久久久| 欧美精品xxx| www.精品av.com| 丝袜亚洲欧美日韩综合| 国产一区二区三区在线观看视频| 2018国产精品视频| 国产视频在线一区二区| 激情成人中文字幕| 国产成人一区二区三区电影| 国产精品高潮呻吟视频| 国产精品久久97| 欧美性生活大片免费观看网址| 最近2019中文字幕一页二页| 成人网中文字幕| 日韩欧美在线播放| 亚洲欧美变态国产另类| 午夜精品一区二区三区av| 欧美电影在线观看完整版| 在线午夜精品自拍| 亚洲男人的天堂在线播放| 欧美三级免费观看| 97视频网站入口| www欧美日韩| 国内精品久久久久影院 日本资源| 日韩欧美成人区| 亚洲国产精品va在看黑人| 成人妇女淫片aaaa视频| 最好看的2019年中文视频| 97精品视频在线播放| 日韩有码视频在线| 久久人人97超碰精品888| 亚洲欧美综合另类中字| 日韩精品极品毛片系列视频| 亚洲美女在线观看| 欧美激情在线视频二区| 91成品人片a无限观看| 日本中文字幕不卡免费| 国产不卡视频在线| 国产欧洲精品视频| 亚洲97在线观看| 色偷偷亚洲男人天堂| 7777kkkk成人观看| 欧美激情视频在线| 91久久精品一区| 国产精品美乳在线观看| 日韩精品在线观| 亚洲精品国产精品自产a区红杏吧| 啪一啪鲁一鲁2019在线视频| 精品国产91乱高清在线观看| 亚洲精品日韩在线| 欧美性xxxxhd| 国模叶桐国产精品一区| 在线精品国产成人综合| 高清日韩电视剧大全免费播放在线观看| 亚洲视频国产视频| 疯狂做受xxxx高潮欧美日本| 国产精品久久久久久五月尺| 91av在线不卡| 亚洲精选中文字幕| 91亚洲精品一区二区| 亚洲精品白浆高清久久久久久| 国产精品欧美日韩久久| 亚洲黄页视频免费观看| 中文字幕亚洲综合久久| 欧美亚洲激情在线| 欧美精品在线免费播放| 91久久嫩草影院一区二区| 97国产成人精品视频| 欧美激情精品久久久| 日韩中文字幕视频在线观看| 日韩中文字幕网站| 欧美黑人巨大精品一区二区| 亚洲色图18p| 日韩精品中文字幕在线| 亚洲天堂第一页| 亚洲性生活视频| 欧美一级淫片丝袜脚交| 日韩欧美在线免费| 久久人人爽人人爽人人片av高请| 亚洲欧美色婷婷| 欧美激情一级二级| 高清视频欧美一级| 91免费高清视频| 欧美极品第一页| 伊人久久综合97精品| 色先锋资源久久综合5566| 91精品视频免费观看| 97香蕉久久夜色精品国产| 欧美成人在线免费| 亚洲福利在线观看| 一本色道久久综合狠狠躁篇怎么玩| 91沈先生在线观看| 日韩一中文字幕| 亚洲欧美在线免费观看| 国产97在线|亚洲| 日韩在线观看av| 国产精品久久久久高潮| 日韩经典一区二区三区| 亚洲精品一二区| 黄网动漫久久久| 97人人模人人爽人人喊中文字| 亚洲美女av黄| 久久久久久91香蕉国产| 亚洲国产高清高潮精品美女| 在线视频欧美日韩| 中文字幕欧美专区| 疯狂做受xxxx欧美肥白少妇| 日韩精品在线观| 97在线视频国产| 97国产精品免费视频| 国产精品成人国产乱一区| 亚洲第一国产精品| xxxxx91麻豆| 九九视频直播综合网| 欧美做受高潮电影o| 久久成人国产精品| 78色国产精品| 97视频免费在线看| 欧美放荡办公室videos4k| 亚洲成人亚洲激情| 国产综合久久久久久| 亚洲三级黄色在线观看| 欧美午夜性色大片在线观看| 777777777亚洲妇女| 亚洲精品v天堂中文字幕| 国产精品视频不卡| 亚洲男人天堂视频| 欧美美最猛性xxxxxx| 一区二区亚洲欧洲国产日韩| 欧美精品成人91久久久久久久| 国产999在线观看| 亚洲**2019国产| 亚洲天堂av在线免费观看| 奇米四色中文综合久久| 欧美巨猛xxxx猛交黑人97人| 色噜噜狠狠狠综合曰曰曰| 国产91亚洲精品| 亚洲精品国精品久久99热| 久久九九有精品国产23| 亚洲专区中文字幕| 日韩久久午夜影院| 黑人巨大精品欧美一区二区免费| 免费91在线视频| 久久精品欧美视频| 国产日韩中文在线|