成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Hibernate映射關(guān)系

gougoujiang / 456人閱讀

摘要:前言首先聲明,這是一篇轉(zhuǎn)發(fā)博客,不屬于原創(chuàng)。關(guān)系映射有下面幾種類(lèi)型一對(duì)一外鍵關(guān)聯(lián)映射單向一對(duì)一外鍵關(guān)聯(lián),使用,并設(shè)置了級(jí)聯(lián)操作。設(shè)置了外鍵的名稱(chēng)為數(shù)據(jù)庫(kù)字段名,如果不設(shè)置,則默認(rèn)為另一類(lèi)的屬性名,外鍵的值是唯一的。

前言

首先聲明,這是一篇轉(zhuǎn)發(fā)博客,不屬于原創(chuàng)。但是感覺(jué)很有用,所以在本人的博客中記錄下來(lái)。

Hibernate Annotation關(guān)系映射有下面幾種類(lèi)型:

一對(duì)一外鍵關(guān)聯(lián)映射(單向)
java
@OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="userid",unique=true) /* 一對(duì)一外鍵關(guān)聯(lián),使用@OneToOne,并設(shè)置了級(jí)聯(lián)操作。@JoinColum設(shè)置了外鍵的名稱(chēng)為userid(數(shù)據(jù)庫(kù)字段名),如果不設(shè)置,則默認(rèn)為另一類(lèi)的屬性名+ _id,外鍵的值是唯一的(unique)。*/
一對(duì)一外鍵關(guān)聯(lián)映射(雙向)

Class1里與上面一樣,對(duì)于Class2:

java
@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)

注意:
需要加上mappedBy="class2",如果不加上的話,Class2也會(huì)生成一個(gè)外鍵(class1_id),mappedby="class2"需要指向與他關(guān)聯(lián)對(duì)象的一個(gè)屬性,說(shuō)明雙向關(guān)聯(lián)關(guān)系中,有且僅有一端是作為主體(owner)端存在的,主體端負(fù)責(zé)維護(hù)聯(lián)接列,對(duì)于不需要維護(hù)這種關(guān)系的從表則通過(guò)mappedBy屬性進(jìn)行聲明,mappedBy的值指向主體的關(guān)聯(lián)屬性

規(guī)律:只有是雙向關(guān)聯(lián)關(guān)系,都加上mappedby

(嵌入式對(duì)象)組件映射

將另外一個(gè)類(lèi)成為實(shí)體類(lèi)的一部分進(jìn)行映射,舉個(gè)例子,用戶的教育經(jīng)歷完全依附于用戶表,但是又有比較復(fù)雜的結(jié)構(gòu),就可以使用Embedded

注意:

成為其他實(shí)體類(lèi)一部門(mén)的類(lèi)不要注解為@Entity 實(shí)體類(lèi)!

使用@Embedded對(duì)組件類(lèi)注解。

組件屬性名名為了保證不與實(shí)體類(lèi)屬性名沖突,可以使用如下注解:

java
@AttributeOverrides( { @AttributeOverride(name="xx",column=@Column(name="xxx")), @AttributeOverride(name="xx2",column=@Column(name="xxx2")), } )

在嵌入式對(duì)象里,對(duì)其屬性使用@column進(jìn)行設(shè)置

下面使用一個(gè)例子結(jié)合@ElementCollection來(lái)說(shuō)明

java@Entity
public class User {
   [...]
   public String getLastname() { ...}

   @ElementCollection
   @CollectionTable(name="Addresses", joinColumns=@JoinColumn(name="user_id"))
   @AttributeOverrides({
      @AttributeOverride(name="street1", column=@Column(name="fld_street"))
   })
   public Set
getAddresses() { ... } } @Embeddable public class Address { public String getStreet1() {...} [...] } //注意,Embedded對(duì)象不能再含有Collection了,同時(shí)一張表是不可避免的
一對(duì)多關(guān)聯(lián)映射(單向)
java
@OneToMany @JoinColumn(name="orgid") /** * 一對(duì)多注解@OneToMany(單向) * 如果只寫(xiě)@OneToMany的話,hibernate會(huì)建一張中間表來(lái) * 維護(hù)他們之間的關(guān)系, * 加上@JoinColumn(name="orgid"),則不會(huì)建中間表,他會(huì)在 * 多的一端加上外鍵orgid,來(lái)維護(hù)他們之間的關(guān)系 */
一對(duì)多關(guān)聯(lián)映射(雙向)

對(duì)于一端:

java
@OneToMany(mappedBy="org") @JoinColumn(name="orgid") /** * 一對(duì)多雙向,在一的一端中設(shè)置mappedBy * 說(shuō)明多的一端為主導(dǎo) * 如果指定了外鍵字段名稱(chēng),則多的一端也需要指定相同的字段名稱(chēng) */

對(duì)于多端:

java
@ManyToOne @JoinColumn(name="orgid") /** * 一對(duì)多雙向 * 需要指定外鍵與一的一端給的外鍵名稱(chēng)一致,@JoinColumn(name="orgid") * 也可以不指定,如果在多的一端不指定,則一的一端也不能指定 * 否則為生成兩個(gè)外鍵 */
多對(duì)一關(guān)聯(lián)映射

在多的一端配置:

java
@ManyToOne(targetEntity=Organization.class) @JoinColumn(name="orgid") //多對(duì)一注解@ManyToOne //targetEntity指定了關(guān)聯(lián)對(duì)象 //@JoinColumn(name="orgid")指定生產(chǎn)的外鍵的字段名,默認(rèn)是org_id
多對(duì)多關(guān)聯(lián)映射(單向)
java
@ManyToMany /** * 多對(duì)多映射:注解@ManyToMany(單向) * 默認(rèn)情況下,hibernate會(huì)自動(dòng)的創(chuàng)建一張中間表, * 來(lái)維護(hù)多對(duì)多關(guān)系 * 默認(rèn)中間表的名稱(chēng) :user_role中間表,字段的名稱(chēng)user_id role_id * 如果想更換表名和字段名稱(chēng),注解如下: */ @JoinTable(name="t_u_r", joinColumns={@JoinColumn(name="u_id")}, inverseJoinColumns={@JoinColumn(name="r_id")} )
多對(duì)多關(guān)聯(lián)映射(雙向)

舉個(gè)例子Role表和User表,用戶可以有多個(gè)角色,角色也可以屬于多個(gè)用戶

User端:

java
@ManyToMany /** * 多對(duì)多映射:注解@ManyToMany(單向) * 默認(rèn)情況下,hibernate會(huì)自動(dòng)的創(chuàng)建一張中間表, * 來(lái)維護(hù)多對(duì)多關(guān)系 * 默認(rèn)中間表的名稱(chēng) :user_role中間表,字段的名稱(chēng)user_id role_id * 如果想更換表名和字段名稱(chēng),注解如下: */ @JoinTable(name="t_u_r", joinColumns={@JoinColumn(name="u_id")}, inverseJoinColumns={@JoinColumn(name="r_id")} ) /** * @JoinTable(name="t_u_r", * 指定中間表的表名 * joinColumns={@JoinColumn(name="u_id")}, * 指定當(dāng)前對(duì)象的外鍵 * inverseJoinColumns={@JoinColumn(name="r_id")} * 指定關(guān)聯(lián)對(duì)象的外鍵 */

Role端:

@ManyToMany(mappedBy="role")

/**

 * 多對(duì)多,雙向關(guān)聯(lián)映射

 */

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64395.html

相關(guān)文章

  • Hibernate映射】知識(shí)要點(diǎn)

    摘要:前言前面的我們使用的是一個(gè)表的操作,但我們實(shí)際的開(kāi)發(fā)中不可能只使用一個(gè)表的因此,本博文主要講解關(guān)聯(lián)映射集合映射需求分析當(dāng)用戶購(gòu)買(mǎi)商品,用戶可能有多個(gè)地址。數(shù)據(jù)庫(kù)表我們一般如下圖一樣設(shè)計(jì)數(shù)據(jù)庫(kù)表,一般我們不會(huì)在表設(shè)計(jì)多個(gè)列來(lái)保存地址的。 前言 前面的我們使用的是一個(gè)表的操作,但我們實(shí)際的開(kāi)發(fā)中不可能只使用一個(gè)表的...因此,本博文主要講解關(guān)聯(lián)映射 集合映射 需求分析:當(dāng)用戶購(gòu)買(mǎi)商品,用戶...

    TesterHome 評(píng)論0 收藏0
  • 初識(shí)Hibernate

    摘要:使用反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。工具類(lèi)初始化失敗為空,請(qǐng)檢查配置文件瞬時(shí)對(duì)象與持久化對(duì)象測(cè)試代碼當(dāng)前在數(shù)據(jù)庫(kù)中沒(méi)有記錄進(jìn)行關(guān)聯(lián),所以此時(shí)是瞬時(shí)對(duì)象。將持久化當(dāng)前在數(shù)據(jù)庫(kù)有唯一一條記錄對(duì)應(yīng),所以此時(shí)是持久化對(duì)象。 showImg(https://segmentfault.com/img/bVbo4at?w=2313&h=642); 一、什么是Hibernate? Hibe...

    tomato 評(píng)論0 收藏0
  • Hibernate 自定義表名映射

    摘要:所以設(shè)計(jì)的表名映射格式為,如果不加注解,則將實(shí)體名按照默認(rèn)的生成規(guī)則進(jìn)行生成,如果加了注解,則填寫(xiě)的就作為表名映射,不進(jìn)行任何處理。云智命名策略實(shí)體與數(shù)據(jù)表名的關(guān)系配置然后將該項(xiàng)配置修改為我們自己建立的實(shí)現(xiàn)類(lèi)。 問(wèn)題描述 Hibernate映射介紹 Hibernate中,默認(rèn)的生成關(guān)系是將我們駝峰命名的實(shí)體進(jìn)行拼接下劃線同時(shí)轉(zhuǎn)小寫(xiě)。 showImg(https://segmentfa...

    weij 評(píng)論0 收藏0
  • Hibernate入門(mén)指南

    摘要:在使用作為應(yīng)用時(shí)推薦使用作為開(kāi)發(fā)工具導(dǎo)入相應(yīng)的的包到文件下的目錄下關(guān)于開(kāi)發(fā)中導(dǎo)入的說(shuō)明在此提供一個(gè)包下載鏈接,地址百度云盤(pán)下載好以后解壓到某個(gè)文件夾里解壓好以后,開(kāi)發(fā)所需要的包在解壓后的包下,將該文件夾下的包復(fù)制到項(xiàng)目中另外還需 1.在使用Hibernate作為orm應(yīng)用時(shí)推薦使用myeclipse作為開(kāi)發(fā)工具2.導(dǎo)入相應(yīng)的Hibernate的jar包到webroot文件下的lib目錄...

    Codeing_ls 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<