背景:
在上一篇文章中實作雙向關聯時,其中在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>();)
View Code
Customer.hbm.xml
set 節點設定為:
Order.java
Order.hbm.xml
測試1:
測試通過。
在運作過程中Customer.java中Set為:class org.hibernate.collection.internal.PersistentSet,屬于hibernate的一個代理對象。
session關閉,将抛出異常。
測試2:
修改Customer.hbm.xml中set節點屬性inverse="true"
測試代碼:
接下來我們要将的是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 原理;加載過程的。。。
【+加關注】。