天天看點

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

背景:

  在上一篇文章中實作雙向關聯時,其中在Customer.java中我們使用了java.util.List<Order>來關聯多的Order。其實還有另外一種實作方法:使用java.util.Set來替代java.util.List。

Customer.java(定義Order:private java.util.Set<Order> orders=new HashSet<Order>();)

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性
Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

View Code

Customer.hbm.xml

set 節點設定為:

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性
Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

Order.java

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性
Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

Order.hbm.xml

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性
Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

測試1:

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性
Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

測試通過。

在運作過程中Customer.java中Set為:class org.hibernate.collection.internal.PersistentSet,屬于hibernate的一個代理對象。

session關閉,将抛出異常。

測試2:

修改Customer.hbm.xml中set節點屬性inverse="true"

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性
Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

測試代碼:

Hibernate(七):*.hbm.xml配置檔案中Set三個屬性
Hibernate(七):*.hbm.xml配置檔案中Set三個屬性

接下來我們要将的是set節點的三個重要屬性:inverse,cascade,order-by。

inverse屬性

1)在Hibernate中通過對inverse屬性來決定是有雙向關聯的哪一方來維護表和表之間的關系。inverse=false為主動方,inverse=true的為被動方,由主動方負責維護關聯關系。

2)在沒有設定inverse=true的情況下,父子兩邊都維護父子關系。

3)在1-n關系中,将n方設為主要方将有助于性能改善。

cascade屬性

級聯,每個Hibernate session的基本操作包括persist()、merge()、saveOrUpdate()、delete()、lock()、refresh()、evict()、replicate(),這些操作都有對應的級聯風格(cascade style)。這些級聯風格(cascade style)風格分别命名為persist、merge、save-update、delete、lock、refresh、evict、replicate。

級聯風格

Session中的方法

persist

persist()

merge

merge()

save-update

save()、update()、saveOrUpdate()

delete

delete()

lock

lock()

refresh

refresh()

evict

evict()

replicate

replicate()

注意: 一般預設是不建議設定cascade屬性。

order-by屬性

 設定查詢時,排序方式。

測試1:

修改Customer.hbml.xml

修改test代碼:

基礎才是程式設計人員應該深入研究的問題,比如:

1)List/Set/Map内部組成原理|差別

2)mysql索引存儲結構&如何調優/b-tree特點、計算複雜度及影響複雜度的因素。。。

3)JVM運作組成與原理及調優

4)Java類加載器運作原理

5)Java中GC過程原理|使用的回收算法原理

6)Redis中hash一緻性實作及與hash其他差別

7)Java多線程、線程池開發、管理Lock與Synchroined差別

8)Spring IOC/AOP 原理;加載過程的。。。

【+加關注】。