雙向一對多關係,一是關係維護端(
owner side
),多是關係被維護端(
inverse side
)。在關係被維護端需要通過@joincolumn建立外來鍵列指向關係維護端的主鍵列。
public
classorderimplementsserializable }
public
classorderitem
implementsserializable }
@orderby(value = "id asc")
指明載入
orderitem
時按id
的公升序排序
@onetomany的屬性:
1>targetentity
定義關係類的型別,預設是該成員屬性對應的類型別,所以通常不需要提供定義。
定義類之間的雙向關係。如果類之間是單向關係,不需要提供定義,如果類和類之間形成雙向關係,我們就需要使用這個屬性進行定義,否則可能引起資料一致性的問題。
該屬性的值是「多」方
class
裡的「一」方的變數名
3>cascade
該屬性定義類和類之間的級聯關係。定義的級聯關係將被容器視為對當前類物件及其關聯類物件採取相同的操作,而且這種關係是遞迴呼叫的。舉個例子:
order
和orderitem
有級聯關係,那麼刪除
order
時將同時刪除它所對應的
orderitem
物件。而如果
orderitem
還和其他的物件之間有級聯關係,那麼這樣的操作會一直遞迴執行下去。
cascade
的值只能從
cascadetype.persist
(級聯新建)、
cascadetype.remove
(級聯刪除)、
cascadetype.refresh
(級聯重新整理)、
cascadetype.merge
(級聯更新)中選擇乙個或多個。還有乙個選擇是使用
cascadetype.all
,表示選擇全部四項。
4>fatch
可選擇項包括:
fetchtype.eager
和fetchtype.lazy
。前者表示關係類
(本例是
orderitem 類)
在主類(
本例是order類)
載入的時候同時載入,後者表示關係類在被訪問時才載入。預設值是
fetchtype.lazy。
@joincolumn(name = "order_id")
注釋指定orderitem對映表的order_id列作為外來鍵與order 對映表的主鍵列關聯。
@manytoone
:指明orderitem和order之間為多對一關係。
@manytoone
注釋有四個屬性:targetentity
、cascade、fetch 和optional,前三個屬性的具體含義和@onetomany的同名屬性相同,但@manytoone
的fetch 屬性預設值是fetchtype.eager。
optional屬性是定義該關聯類是否必須存在,值為false 時,關聯類雙方都必須存在,如果關係被維護端不存在,查詢的結果為null。值為true 時, 關係被維護端可以不存在,查詢的結果仍然會返回關係維護端,在關係維護端中指向關係被維護端的屬性為null。optional
屬性的預設值是true。optional
屬性實際上指定關聯類與被關聯類的join 查詢關係,如optional=false
時join 查詢關係為inner join, optional=true 時join 查詢關係為left join。下面**片斷解釋如下:
有一點需要強調:當業務方法需要把乙個實體
bean
作為引數返回給客戶端時,除了實體
bean
本身需要實現
serializable
介面之外,如果關聯類
(orderitem)
是延遲載入,還需在返回實體
bean
之前通過訪問關聯類的方式載入關聯類(見下例)。否則在客戶端訪問關聯類時將會丟擲載入例外。
publicorder getorderbyid(integer orderid)
另外不管是否延遲載入,通過
join fetch
關聯語句都可顯式載入關聯類,如下例:
publiclist getallorder()
ManyToOne 雙向一對多關係
雙向一對多關係,一是關係維護端 owner side 多是關係被維護端 inverse side 在關係被維護端需要通過 joincolumn建立外來鍵列指向關係維護端的主鍵列。public classorderimplementsserializable public classorderitem...
JPA雙向一對多關聯關係
用法和單向一對多和單向多對一用法是一樣的,需要說的就是讓那一邊來維護關聯關係,如果不考慮這個也沒什麼關係,考慮的話可以對效能有一點提公升。joincolumn name customer id public setgetorders 預設兩邊維護關聯關係 若先儲存n的一端,再儲存1的一端,則兩邊在傳...
sqlalchemy 一對多 關係
import os import sqlalchemy from sqlalchemy import create engine,column,integer,string,foreignkey,sequence from sqlalchemy.ext.declarative import decl...