JPA總結(jié)——實(shí)體關(guān)系映射(一對(duì)一@OneToOne)

一對(duì)一(@OneToOne)

· 單向關(guān)聯(lián)

# 注釋@OneToOne定義如下:

@Target({METHOD, FIELD}) @Retention(RUNTIME)

public @interface OneToOne {

Class targetEntity() default void.class;

CascadeType[] cascade() default {};

FetchType fetch() default EAGER;

boolean optional() default true;

String mappedBy() default "";

}

# targetEntity屬性表示默認(rèn)關(guān)聯(lián)的實(shí)體類型,默認(rèn)為當(dāng)前標(biāo)注的實(shí)體類;

# cascade屬性表示與此實(shí)體一對(duì)一關(guān)聯(lián)的實(shí)體的聯(lián)級(jí)樣式類型。聯(lián)級(jí)樣式上當(dāng)對(duì)實(shí)體進(jìn)行操作時(shí)的策略。

說明:在定義關(guān)系時(shí)經(jīng)常會(huì)涉及是否定義Cascade(級(jí)聯(lián)處理)屬性瓢省,擔(dān)心造成負(fù)面影響.

·不定義,則對(duì)關(guān)系表不會(huì)產(chǎn)生任何影響

·CascadeType.PERSIST (級(jí)聯(lián)新建)

·CascadeType.REMOVE (級(jí)聯(lián)刪除)

·CascadeType.REFRESH (級(jí)聯(lián)刷新)

·CascadeType.MERGE (級(jí)聯(lián)更新)中選擇一個(gè)或多個(gè)。

·還有一個(gè)選擇是使用CascadeType.ALL ,表示選擇全部四項(xiàng)

# fetch屬性是該實(shí)體的加載方式椰于,有兩種:LAZY和EAGER。

# optional屬性表示關(guān)聯(lián)的實(shí)體是否能夠存在null值仪搔。默認(rèn)為true瘾婿,表示可以存在null值。如果為false烤咧,則要同時(shí)配合使用@JoinColumn標(biāo)記偏陪。

# mappedBy屬性用于雙向關(guān)聯(lián)實(shí)體時(shí),標(biāo)注在不保存關(guān)系的實(shí)體中煮嫌。

關(guān)聯(lián)指定列(@JoinColumn)

# @JoinColumn用于注釋表中的字段笛谦,與@Column不同的是它要保存表與表之間關(guān)系的字段;

# name屬性是用來標(biāo)記表中對(duì)應(yīng)的字段的名稱昌阿。如果不設(shè)置name的值饥脑,默認(rèn)情況下,name的取值規(guī)則如下:

name=關(guān)聯(lián)的表的名稱 + "_" + 關(guān)聯(lián)表主鍵的字段名

# 默認(rèn)情況下宝泵,關(guān)聯(lián)的實(shí)體的主鍵一般用來做外鍵的好啰。如果不想用主鍵作為外鍵,則需要設(shè)置referencedColumnName屬性儿奶,如:

@JoinColumn(name="address_id", referencedColumnName="ref_id")

# @JoinColumn可以與@OneToOne框往、@ManyToOne或@ManyToMany標(biāo)記同時(shí)使用。

一對(duì)一單向關(guān)聯(lián)示例:

·客戶實(shí)體類CustomerEO:

@Entity

@Table(name="customer")

public class CustomerEO implement Serializable{

@Id

@GeneratedValue(stragegy=GenerationType=AUTO)

private int id;

@OneToOne(casade={CascadeTypeType.ALL})

@JoinColumn(name="address_id")

private AddressEO address;

....

}

·地址薄類AddressEO:

@Entity

@Table(name="address")

public class AddressEO implement Serializable{

@Id

@GeneratedValue(stragegy=GenerationType=AUTO)

private int id;

....

}

· 雙向關(guān)聯(lián)(Bidirectional)

如上述示例中闯捎,將AddressEO修改如下:

·地址薄類AddressEO:

@Entity

@Table(name="address")

public class AddressEO implement Serializable{

@Id

@GeneratedValue(stragegy=GenerationType=AUTO)

private int id;

@OneToOne(mappedBy="address")

privatre CustomerEO customer;

....

}

即可椰弊。

* 以上所有示例及關(guān)系中表結(jié)構(gòu)如下:

TABLE customer(id int, name varcher,address_id int, PRIMARY KEY id)

TABLE address(id int, address_name varcher, zipcode varcher, city varcher, PRIMARY KEY id)

· 主鍵關(guān)聯(lián)(@PrimaryKeyJoinColumn)

# 在關(guān)聯(lián)的兩個(gè)實(shí)體中直接使用@PrimaryKeyJoinColumn注釋;

# 在上述表結(jié)構(gòu)中需要在customer表中去掉address_id字段瓤鼻;

示例:

·客戶實(shí)體類CustomerEO:

@Entity

@Table(name="customer")

public class CustomerEO implement Serializable{

@Id

@GeneratedValue(stragegy=GenerationType=AUTO)

private int id;

@OneToOne(casade={CascadeTypeType.ALL})

@PrimaryKeyJoinColumn

private AddressEO address;

....

}

·地址薄類AddressEO:

@Entity

@Table(name="address")

public class AddressEO implement Serializable{

@Id

@GeneratedValue(stragegy=GenerationType=AUTO)

private int id;

@PrimaryKeyJoinColumn

privatre CustomerEO customer;

....

}

·默認(rèn)關(guān)聯(lián)

如果表中使用了外鍵秉版,則在映射實(shí)體中不需要做其他的設(shè)置。

@Entity

@Table(name="customer")

public class CustomerEO implement Serializable{

@Id

@GeneratedValue(stragegy=GenerationType=AUTO)

private int id;

@OneToOne

private AddressEO address;

....

}

一對(duì)一映射的步驟:

1. 確定實(shí)體間關(guān)系茬祷;

2. 考慮表結(jié)構(gòu)清焕;

3. 考慮實(shí)體關(guān)系的方向性;

若為雙向關(guān)聯(lián),則在保存實(shí)體關(guān)系的實(shí)體中秸妥,要配合@JoinColumn注釋滚停;在沒有保存實(shí)體關(guān)系的實(shí)體中,要用mappedBy屬性明確所關(guān)聯(lián)的實(shí)體粥惧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末键畴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子突雪,更是在濱河造成了極大的恐慌起惕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咏删,死亡現(xiàn)場(chǎng)離奇詭異惹想,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)饵婆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門勺馆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侨核,你說我怎么就攤上這事草穆。” “怎么了搓译?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵悲柱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我些己,道長(zhǎng)豌鸡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任段标,我火速辦了婚禮涯冠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逼庞。我一直安慰自己蛇更,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布赛糟。 她就那樣靜靜地躺著派任,像睡著了一般。 火紅的嫁衣襯著肌膚如雪璧南。 梳的紋絲不亂的頭發(fā)上掌逛,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音司倚,去河邊找鬼豆混。 笑死篓像,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崖叫。 我是一名探鬼主播遗淳,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拍柒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼心傀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拆讯,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脂男,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后种呐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宰翅,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年爽室,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汁讼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阔墩,死狀恐怖嘿架,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啸箫,我是刑警寧澤耸彪,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站忘苛,受9級(jí)特大地震影響蝉娜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扎唾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一召川、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胸遇,春花似錦荧呐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至薄腻,卻和暖如春收捣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庵楷。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工罢艾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留楣颠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓咐蚯,卻偏偏與公主長(zhǎng)得像童漩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子春锋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法矫膨,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法期奔,繼承相關(guān)的語(yǔ)法侧馅,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,623評(píng)論 18 399
  • 一呐萌、Hibernate 檢索 hibernate 提供5種檢索數(shù)據(jù)的方式導(dǎo)航對(duì)象圖檢索方式: 根據(jù)已經(jīng)加載的對(duì)象...
    luweicheng24閱讀 384評(píng)論 0 0
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,810評(píng)論 0 11
  • 關(guān)系型數(shù)據(jù)庫(kù)和SQL SQL語(yǔ)言的三個(gè)部分DML:Data Manipulation Language馁痴,數(shù)據(jù)操縱語(yǔ)...
    Awey閱讀 1,947評(píng)論 0 13
  • 滴罗晕,老司機(jī)請(qǐng)飆車,滴赠堵,老司機(jī)正開車小渊!吃瓜少年,聽說你骨骼清奇顾腊,將來必成大器粤铭,送一本《聯(lián)想社區(qū)原創(chuàng)達(dá)人秘籍》給你。嘿...
    心跳的感覺_2ca0閱讀 214評(píng)論 0 0