中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate持久化技術怎么理解

發布時間:2021-12-04 17:32:09 來源:億速云 閱讀:146 作者:iii 欄目:編程語言

本篇內容主要講解“Hibernate持久化技術怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hibernate持久化技術怎么理解”吧!

在一般應用程序中,用來實現業務問題實體的(如,在電子商務應用程序中的Customer和Order) 類就是持久化類。不能認為所有的持久化類的實例都是持久的狀態——一個實例的狀態也可能 是瞬時的或脫管的。

如果這些Hibernat持久化類遵循一些簡單的規則,Hibernate能夠工作得更好,這些規則也被稱作 簡單傳統Java對象(POJO:Plain Old Java Object)編程模型。但是這些規則并不是必需的。 實際上,Hibernate3對于你的持久化類幾乎不做任何設想。你可以用其他的方法來表達領域模型: 比如,使用Map實例的樹型結構。

一個簡單的POJO例子說明Hibernate持久化
大多數Java程序需要用一個持久化類來表示貓科動物。

package eg;  import java.util.Set;  import java.util.Date;   public class Cat {      private Long id; // identifier       private Date birthdate;      private Color color;      private char sex;      private float weight;      private int litterId;       private Cat mother;      private Set kittens = new HashSet();       private void setId(Long id) {          this.id=id;      }      public Long getId() {          return id;      }       void setBirthdate(Date date) {          birthdate = date;      }      public Date getBirthdate() {          return birthdate;      }       void setWeight(float weight) {          this.weight = weight;      }      public float getWeight() {          return weight;      }       public Color getColor() {          return color;      }      void setColor(Color color) {          this.color = color;      }       void setSex(char sex) {          this.sex=sex;      }      public char getSex() {          return sex;      }       void setLitterId(int id) {          this.litterId = id;      }      public int getLitterId() {          return litterId;      }       void setMother(Cat mother) {          this.mother = mother;      }      public Cat getMother() {          return mother;      }      void setKittens(Set kittens) {          this.kittens = kittens;      }      public Set getKittens() {          return kittens;      }            // addKitten not needed by Hibernate      public void addKitten(Cat kitten) {          kitten.setMother(this);      kitten.setLitterId( kittens.size() );           kittens.add(kitten);      }  }

這里要遵循四條主要的規則:

1. 實現一個默認的(即無參數的)構造方法(constructor)

Cat有一個無參數的構造方法。所有的持久化類都必須有一個 默認的構造方法(可以不是public的),這樣的話Hibernate就可以使用 Constructor.newInstance()來實例化它們。 我們強烈建議,在Hibernate中,為了運行期代理的生成,構造方法至少是 包(package)內可見的。

2. 提供一個標識屬性(identifier property)(可選)

Cat有一個屬性叫做id。這個屬性映射數據庫表的主 鍵字段。這個屬性可以叫任何名字,其類型可以是任何的原始類型、原始類型的包裝類型、 java.lang.String 或者是 java.util.Date。 (如果你的遺留數據庫表有聯合主鍵,你甚至可以用一個用戶自定義的類,該類擁有這些類型 的屬性。參見后面的關于聯合標識符的章節。)

標識符屬性是可選的。可以不用管它,讓Hibernate內部來追蹤對象的識別。 但是我們并不推薦這樣做。

實際上,一些功能只對那些聲明了標識符屬性的類起作用:

托管對象的傳播性再連接(級聯更新或級聯合并) ——參閱 第 10.11 節 “傳播性持久化(transitive persistence)”

◆Session.saveOrUpdate()

◆Session.merge()

我們建議你對持久化類聲明命名一致的標識屬性。我們還建議你使用一 個可以為空(也就是說,不是原始類型)的類型。

3. 使用非final的類 (可選)

代理(proxies)是Hibernate的一個重要的功能,它依賴的條件是,持久 化類或者是非final的,或者是實現了一個所有方法都聲明為public的接口。

你可以用Hibernate持久化一個沒有實現任何接口的final類,但是你 不能使用代理來延遲關聯加載,這會限制你進行性能優化的選擇。

你也應該避免在非final類中聲明 public final的方法。如果你想使用一 個有public final方法的類,你必須通過設置lazy="false" 來明確地禁用代理。

4. 為持久化字段聲明訪問器(accessors)和是否可變的標志(mutators)(可選)

Cat為它的所有持久化字段聲明了訪問方法。很多其他ORM工具直接對 實例變量進行持久化。我們相信,在關系數據庫schema和類的內部數據結構之間引入間接層(原文為"非直接",indirection)會好一些。默認情況下Hibernate持久化JavaBeans風格的屬性,認可 getFoo,isFoo 和 setFoo這種形式的方法名。 如果需要,你可以對某些特定屬性實行直接字段訪問。

屬性不需要要聲明為public的。Hibernate可以持久化一個有 default、protected或private的get/set方法對的屬性進行Hibernate持久化

TODO:property和proxy包里的用戶擴展框架文檔。

到此,相信大家對“Hibernate持久化技術怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

牡丹江市| 长丰县| 赣州市| 神池县| 山阴县| 龙胜| 依兰县| 宁波市| 吕梁市| 正镶白旗| 日喀则市| 惠水县| 罗田县| 奉化市| 米脂县| 桐柏县| 怀来县| 灵川县| 红桥区| 清新县| 长武县| 抚松县| 封开县| 大理市| 福海县| 茂名市| 连南| 丹东市| 偏关县| 马公市| 横峰县| 青浦区| 邻水| 兴山县| 济南市| 桑植县| 高淳县| 新河县| 英超| 浠水县| 和林格尔县|