成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

舉例說明Hibernate持久化技術

開發 后端
Hibernat持久化類遵循一些簡單的規則,Hibernate能夠工作得更好,這些規則也被稱作 簡單傳統Java對象(POJO:Plain Old Java Object)編程模型。

Hibernate持久化技術讓我們能夠工作得更好,我們通過一個例子來簡單說明Hibernate持久化技術的應用。

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

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

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

  1. package eg;  
  2. import java.util.Set;  
  3. import java.util.Date;  
  4.  
  5. public class Cat {  
  6.     private Long id; // identifier  
  7.  
  8.     private Date birthdate;  
  9.     private Color color;  
  10.     private char sex;  
  11.     private float weight;  
  12.     private int litterId;  
  13.  
  14.     private Cat mother;  
  15.     private Set kittens = new HashSet();  
  16.  
  17.     private void setId(Long id) {  
  18.         this.id=id;  
  19.     }  
  20.     public Long getId() {  
  21.         return id;  
  22.     }  
  23.  
  24.     void setBirthdate(Date date) {  
  25.         birthdate = date;  
  26.     }  
  27.     public Date getBirthdate() {  
  28.         return birthdate;  
  29.     }  
  30.  
  31.     void setWeight(float weight) {  
  32.         this.weight = weight;  
  33.     }  
  34.     public float getWeight() {  
  35.         return weight;  
  36.     }  
  37.  
  38.     public Color getColor() {  
  39.         return color;  
  40.     }  
  41.     void setColor(Color color) {  
  42.         this.color = color;  
  43.     }  
  44.  
  45.     void setSex(char sex) {  
  46.         this.sex=sex;  
  47.     }  
  48.     public char getSex() {  
  49.         return sex;  
  50.     }  
  51.  
  52.     void setLitterId(int id) {  
  53.         this.litterId = id;  
  54.     }  
  55.     public int getLitterId() {  
  56.         return litterId;  
  57.     }  
  58.  
  59.     void setMother(Cat mother) {  
  60.         this.mother = mother;  
  61.     }  
  62.     public Cat getMother() {  
  63.         return mother;  
  64.     }  
  65.     void setKittens(Set kittens) {  
  66.         this.kittens = kittens;  
  67.     }  
  68.     public Set getKittens() {  
  69.         return kittens;  
  70.     }  
  71.       
  72.     // addKitten not needed by Hibernate  
  73.     public void addKitten(Cat kitten) {  
  74.         kitten.setMother(this);  
  75.     kitten.setLitterId( kittens.size() );   
  76.         kittens.add(kitten);  
  77.     }  

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

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包里的用戶擴展框架文檔。

【編輯推薦】

  1. 簡述Hibernate中加載并存儲對象
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動狀態檢測
  4. 簡單學會Hibernate對象持久化
  5. 分析Hibernate自增主鍵
責任編輯:仲衡 來源: javanb
相關推薦

2013-11-26 11:08:23

Linux命令diff

2018-11-28 08:20:15

Linuxalias命令

2010-06-22 13:08:42

Linux At命令

2010-01-12 15:56:25

C++軟件

2010-01-18 17:31:54

C++編寫程序

2010-06-18 10:24:51

Linux acces

2010-01-21 09:53:23

C++操作符

2010-03-03 10:55:39

2010-03-04 13:21:32

linux壓縮命令

2010-01-06 16:54:07

.Net Framew

2009-12-07 17:28:55

WCF數據

2010-01-08 17:06:52

C++代碼

2010-03-04 13:45:37

Linux壓縮命令

2010-04-09 16:52:36

Unix操作系統

2010-01-20 10:19:16

VB.NET動態接口

2010-09-24 17:39:28

SQL中EXISTS

2010-01-06 10:35:02

Json_Decode

2010-03-04 15:00:12

Linux不同網段訪問

2009-09-29 16:46:01

創建Hibernate

2009-09-28 15:50:53

Hibernate創建持久化Product
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美男人天堂 | 天天综合久久网 | 亚洲精品一区二区三区 | 91.com视频| 国产精品久久久久久吹潮 | 户外露出一区二区三区 | 人人九九精 | 精品国产网 | 久久亚洲天堂 | 久草视频观看 | 成人欧美一区二区 | 欧美成人综合 | 国产成人99久久亚洲综合精品 | 日韩国产中文字幕 | 精品国产高清一区二区三区 | 日韩欧美国产一区二区 | 亚洲日韩中文字幕 | 国产精品视频免费播放 | 国产精品久久久久久久久污网站 | 在线视频亚洲 | 国产精品久久久久婷婷二区次 | 欧美黄色片| 亚洲精品99 | 亚洲免费久久久 | 综合另类| 日韩精品久久久久 | 精品一区国产 | 国产综合在线视频 | 欧美视频在线看 | 精品无码三级在线观看视频 | 久久国产欧美日韩精品 | 欧美中文字幕一区二区三区亚洲 | 97精品一区二区 | 黄色免费网址大全 | 亚洲欧美一区二区在线观看 | 久草免费视 | 亚洲一区视频在线 | 亚洲精品一区二区三区蜜桃久 | 欧日韩在线 | 午夜在线电影网 | 国产精品自产拍 |