日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Hibernate的OrdersOrderItem類

Hibernate還是比較常用的,于是我研究了一下Orders OrderItem,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。

永福ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

Orders OrderItem

有時(shí)一個(gè)一個(gè)地操縱對(duì)象確實(shí)可行,但是我們希望能夠級(jí)聯(lián)加載和更新?,F(xiàn)在我們來(lái)看如何做到這一點(diǎn)。

我們需要同時(shí)檢查Order OrderItem。就如前面所提到的,我們添加一項(xiàng)Product到一個(gè)Order中,它將變成一個(gè)Order OrderItem在內(nèi)部保存一個(gè)OrderItem集。我們希望保存Order,讓Hibernate來(lái)做其他工作:保存OrderItem和更新所添加的Product的可用庫(kù)存(數(shù)量)。聽(tīng)起來(lái)很復(fù)雜,但實(shí)際上非常簡(jiǎn)單。Hibernate知道如何處理一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多方式中的相關(guān)對(duì)象。我們將從映射文件開(kāi)始。

Order.hbm.xml

 
 
 
  1.  version="1.0" encoding="UTF-8"?>
  2. "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  3.  name="test.hibernate.Order" table="orders">
  4.  name="id" type="string" unsaved-value="null" >
  5.  name="id" sql-type="char(32)" not-null="true"/>
  6.  class="uuid.hex"/>
  7.  name="date">
  8.  name="order_date"sql-type="datetime" not-null="true"/>
  9.  name="priceTotal">
  10.  name="price_total"sql-type="double" not-null="true"/>
  11.  
  12.  name="orderItems" table="order_items" inverse="true"cascade="all">
  13.  column="order_id" />
  14.  class="test.hibernate.OrderItem" />
  15.  

這個(gè)映射文件非常易于理解,除了最后一個(gè)元素。它表示了不同類之間的連接,在我們的例子中,這些類是Order和 OrderItem。屬性和子元素很容易理解:一個(gè)Set類型的字段,名為orderItems(參見(jiàn)上面的Order源代碼),它包含類型為test.hibernate.OrderItem的對(duì)象,正如子元素所解釋的那樣。這些對(duì)象被持久化在表order_items中,order_id列包含OrderItem類型的對(duì)象的鍵。

 cascade="all"是一個(gè)非常重要的屬性。它解釋了在操縱連接到的對(duì)象時(shí),Hibernate如何動(dòng)作。在我們的例子中,當(dāng)創(chuàng)建一個(gè)Order時(shí),我們無(wú)疑希望它所有的OrderItem也被創(chuàng)建;當(dāng)然,當(dāng)一個(gè)Order被刪除時(shí),我們也希望它所有的OrderItem也被刪除。Cascade屬性還有另外三個(gè)選項(xiàng)(none、save-update和delete),我們將在下面的示例中看一下如何使用它們。

這個(gè)對(duì)象比較有意思。它的實(shí)例自動(dòng)在Order中創(chuàng)建,基本上不會(huì)存在于其外。然而,由于它們?cè)趧?chuàng)建Order時(shí)代表Product,所以我們需要它們。如果一項(xiàng)產(chǎn)品的價(jià)格改變了,我們無(wú)疑不希望所有相關(guān)的OrderItem以及Order的價(jià)格被改變。我們需要的只是在OrderItem創(chuàng)建時(shí)更新Product的可用庫(kù)存。最后,當(dāng)一項(xiàng)Order被刪除時(shí),其OrderItem也被刪除,但我們不能改變Product!聽(tīng)上去很復(fù)雜,特別是要編寫所有這些SQL語(yǔ)句的話。但Hibernate把它們壓縮成了映射文件中的兩行!

 
 
 
  1.  version="1.0" encoding="UTF-8"?>
  2. "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  3.  name="test.hibernate.OrderItem"table="order_items">
  4.  name="id" type="string" unsaved-value="null" >
  5.  name="id" sql-type="char(32)"not-null="true"/>
  6.  class="uuid.hex"/>
  7.  name="orderId" insert="false"update="false">
  8.  name="order_id" sql-type="char(32)"not-null="true"/>
  9.  name="productId" insert="false"update="false">
  10.  name="product_id" sql-type="char(32)"not-null="true"/>
  11.  name="amount">
  12.  name="amount" sql-type="int"not-null="true"/>
  13.  name="price">
  14.  name="price" sql-type="double"not-null="true"/>
  15.  name="order"class="test.hibernate.Order"column="order_id" />
  16.  name="product"class="test.hibernate.
    Product"cascade="save-update"column="product_id"/>

到目前為止,我們了解了關(guān)于元素的一切,但是一個(gè)新元素。這個(gè)元素非常簡(jiǎn)單。第一個(gè)元素指出OrderItem的名為order的字段是test.hibernate.Order 類型,并且通過(guò)表order_items的order_id列來(lái)引用(參見(jiàn)class元素的table屬性)。第二個(gè)many-to-one元素類似于第一個(gè),除了它具有cascade="save-update"屬性。它在定義的內(nèi)容之前進(jìn)行解釋。在這個(gè)例子中,我們假設(shè)Hibernate只在保存(創(chuàng)建)或更新(更改)OrderItem時(shí)傳遞Product的更改,而在刪除時(shí)不傳遞更改。因此,上述的復(fù)雜SQL語(yǔ)句就被壓縮為單個(gè)屬性!現(xiàn)在這個(gè)問(wèn)題解決了!


當(dāng)前文章:Hibernate的OrdersOrderItem類
分享地址:http://www.5511xx.com/article/dpcsesp.html