惠民福利国产午夜成人av在线播放_国产精品区一区二区三亚洲欧美日韩另类在线_免费无码婬片AAA_日韩精品中文字幕本一本二

hibernate關(guān)聯(lián)映射注解

來源:CSDN 瀏覽量:232 發(fā)布時(shí)間:2018-12-27 20:59:47

1、一對一單項(xiàng)外鍵(比如實(shí)體People和實(shí)體IDCard,一個(gè)人對應(yīng)一個(gè)身份證號,反之)

@OneToOne(cascade=CAscadeType.ALL)全級聯(lián)關(guān)系

@JoinColumn(name="pid",unique=true)被控類的外鍵寫到主控類中,且唯一

ps:保存時(shí)應(yīng)該先保存外鍵對象,再保存主表對象,這是因?yàn)閿?shù)據(jù)庫相關(guān)約束的原因


2、一對一雙向外鍵

主控方配置不變

被控方添加

@OneToOne(mappedBy="card")myppedBy指定了把控制權(quán)利交給主控方,指定主控方所對應(yīng)的外鍵屬性card

ps:雙向關(guān)聯(lián),必須設(shè)置mappedBy屬性,因?yàn)殡p向關(guān)聯(lián)只能交給一方去控制,不可能雙方都設(shè)置外鍵保存關(guān)聯(lián)關(guān)系,否則雙方都無法保存


3、多對一單向外鍵(如多個(gè)學(xué)生對應(yīng)一個(gè)班級)

在多方添加注解

@ManyToOne(cascade{CAscadeType.ALL},fetch=FetchType.EAGER)

EAGER表示迫切的加載

@JoinColumn(name="cid",referencedColumnName="CID")JoinColumn在此處表示多方持有一方的引用,一方的外鍵用name表示,referencedColumnName表示如果這個(gè)外鍵映射到數(shù)據(jù)庫中作為屬性給它起的別名


4、一對多單向外鍵(如一個(gè)班級有多個(gè)學(xué)生)

在一的一方添加注解,一方持有多方的一個(gè)集合

@OneToMany(cascade{CAscadeType.ALL},fetch=FetchType.LAZY)

@JoinColumn(name="cid")cid仍然存在于學(xué)生表中作為外鍵

ps:FetchType的抓取數(shù)據(jù)策略,如果是多對一,多的一方通常設(shè)置為EAGER,一對多,一的一方通常設(shè)置為LAZY


5、一對多(多對一)雙向外鍵

在多方添加注解

@ManyToOne(cascade{CAscadeType.ALL},fetch=FetchType.EAGER)

@JoinColumn(name="cid")

在一的一方添加注解

@OneToMany(cascade{CAscadeType.ALL},fetch=FetchType.LAZY)

@JoinColumn(name="cid")

ps:這里的@JoinColumn可能不太好理解,但你仔細(xì)想想(假設(shè)對象為學(xué)生和班級),每個(gè)學(xué)生都可以有一個(gè)cid屬性作為他的外鍵,表示他屬于哪個(gè)班級,但不可能班級表里面有sid,因?yàn)橐粋€(gè)班級可能有多個(gè)學(xué)生,這就導(dǎo)致sid不能只有一個(gè),這將破壞外鍵的唯一性


6、多對多單向外鍵

其中一個(gè)多方持有另一個(gè)多方的集合對象(如學(xué)生持有老師的集合)

學(xué)生和老師之間的外鍵關(guān)系的維護(hù)需要通過中間表來完成

注解

@ManyToMany

@JoinTable(name="teachers_students",JoinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="tid")})

Jointable注解可以生成中間表,JoinColumns和inverseJoinColumns指定了相應(yīng)的控制字段


7、多對多雙向外鍵

雙方都持有對方的集合,其中一方設(shè)置

如教師類

@ManyToMany(mappedBy="teachers")將主控方交給學(xué)生

學(xué)生類

@ManyToMany

@JoinTable(name="teachers_students",JoinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="tid")})

--------------------- 

作者:JokerZhan 

來源:CSDN 

原文:https://blog.csdn.net/JokerZhan/article/details/85014806