inverse = ?
inverse=false(default)
用於單向onetomany關聯
parentgetChildren()add(child) // insert child
parentgetChildren()delete(child) // delete child
inverse=true
用於雙向onetomany關聯
childsetParent(parent) sessionsave(child) // insert child
sessiondelete(child)
在分層結構的體系中parentDao childDao對於CRUD的封裝導致往往直接通過session接口持久化對象而很少通過關聯對象可達性
To be the best IT community
onetomany關系單向關系還是雙向關系?
parentgetChildren()add(child)對集合的觸及操作會導致lazy的集合初始化在沒有對集合配置二級緩存的情況下應避免此類操作l select * from child where parent_id = xxx性能口訣
一般情況下避免使用單向關聯盡量使用雙向關聯l 使用雙向關聯inverse=true
在分層結構中通過DAO接口用session直接持久化對象避免通過關聯關系進行可達性持久化
To be the best IT community
manytoone關系
單向manytoone表達了外鍵存儲方靈活運用manytoone可以避免一些不必要的性能問題
manytoone表達的含義是……n many可以是可以是也可以是n也就是說manytoone可以表達一對多一對一多對一關系因此可以配置雙向manytoone關系例如l 一桌四人打麻將麻將席位和打麻將的人是什麼關系?是雙向manytoone的關系To be the best IT community
onetoone通過主鍵進行關聯相當於把大表拆分為多個小表例如把大字段單獨拆分出來以提高數據庫操作的性能Hibernate的onetoone似乎無法lazy必須通過bytecode enhancement To be the best IT community
集合List/Bag/Set onetomany l List需要維護index column不能被用於雙向關聯必須inverse=false被謹慎的使用在某些稀有的場合l Bag/Set語義上沒有區別l 我個人比較喜歡使用Bag manytomany l Bag和Set語義有區別l 建議使用Set To be the best IT community
集合的過濾l children = sessioncreateFilter(parentgetChildren() where thisage > and thisage < )list()
針對一對多關聯當中的集合元素非常龐大的情況特別適合於龐大集合的分頁l sessioncreateFilter(parentgetChildren())setFirstResult()setMaxResults()list()To be the best IT community
繼承關系當中的隱式多態HQL from Object l 將把所有數據庫表全部查詢出來l polymorphism=implicit(default)將當前對象和對象所有繼承子類全部一次性取出l polymorphism=explicit只取出當前查詢對象To be the best IT community
[] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29059.html