欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明

 更新時(shí)間:2024年05月18日 10:52:07   作者:Hommmmmmm  
這篇文章主要介紹了JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、@JoinColumn

@JoinColumn 的作用就是聲明關(guān)聯(lián)關(guān)系的,什么是關(guān)聯(lián)關(guān)系?

就是我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)時(shí)常說的一對(duì)多、多對(duì)一、多對(duì)多關(guān)系。

因此,@JoinColumn 必須和這些關(guān)系注解一起使用,否則是沒有意義的。

二、name 和 referencedColumnName

剛開始接觸這兩個(gè)屬性會(huì)覺得很難理解,特別是看書的時(shí)候總是分不清,看下面的例子:

// Address表對(duì)應(yīng)的Entity
Class Address{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    ...
}

// User表對(duì)應(yīng)的Entity
Class User{
    ...
    // 顯然下面這個(gè)屬性表示每個(gè)User對(duì)應(yīng)一個(gè)Address,思考一下:
    // 平時(shí)我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候會(huì)怎么處理這種關(guān)系?我一般對(duì)這
    // 一對(duì)一的關(guān)系,都會(huì)直接在User表中添加一個(gè)字段指向Address
    // 的主鍵,而下面注解確實(shí)是這樣做的。
     @OneToOne
    @JoinColumn(name = "address", referencedColumnName = "id")
    private Address address;
    ...
}

其實(shí)這兩個(gè)屬性指向的都是數(shù)據(jù)庫(kù)字段,也就是數(shù)據(jù)庫(kù)里面真真實(shí)實(shí)存在的表的字段,而不是我們?cè)贘ava程序中的成員變量名。

如上面的代碼,它表示在User表中添加一個(gè)address字段,這個(gè)字段的取值就是 Address 表的 id,也就是主鍵,也就說明了它通過這個(gè)字段關(guān)聯(lián)著兩張表,這其實(shí)就是我們?cè)趯W(xué)習(xí)數(shù)據(jù)庫(kù)時(shí)處理一對(duì)一關(guān)系的一種方法,是不是很熟悉?

所以,一定記住,兩個(gè)屬性都是指數(shù)據(jù)庫(kù)里的字段!?。。?/strong>

  • name:當(dāng)前表的字段
  • referencedColumnName:引用表對(duì)應(yīng)的字段,如果不注明,默認(rèn)就是引用表的主鍵

實(shí)際上數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)如下, User 的 address 字段關(guān)聯(lián)著 Address 的 id 字段:

User 表屬性語義
idID
address地址主鍵
其他屬性
Address 表屬性語義
idID
其他屬性

看了上面的表是不是就很清楚了?

很多網(wǎng)上的解釋說 name 指的是外鍵名、實(shí)體字段名,其實(shí)都不是很準(zhǔn)確,容易混淆,還是要?jiǎng)邮肿鲆幌隆?/p>

了解了JoinColumn 不妨進(jìn)一步了解下 @JoinTable 的 JoinColumn 屬性,這個(gè)也是比較容易混淆的。

三、@JoinTable 的 JoinColumn 屬性

@JoinTable 一般和 @ManyToMany 使用,處理多對(duì)多關(guān)系,需要兩個(gè) Entity 有中間關(guān)系表。

“一對(duì)多”一般不會(huì)使用關(guān)系表,而選擇將“一”直接作為“多”的一個(gè)屬性。

這也是我們學(xué)數(shù)據(jù)庫(kù)時(shí)聽老師講的常用方法。

JoinTable 有很多屬性,但我們了解基本的 JoinColumn 相關(guān)屬性即可,和我們上面說的一樣,JoinColumn 實(shí)際上指的是數(shù)據(jù)庫(kù)的字段

下面從 《Spring Data JPA 從入門到精通》截取的示例:

@Entity
public class Blog{
    @ManyToMany
    @JoinTable(name="blog_tag_relation",
                joinColumns=@joinColumn(name="blog_id",referencedColumnName="id"),
                inverseJoinColumn=@joinColumn(name="tag_id",referencedColumnName="id"))
    private List<Tag> tags = new ArrayList<Tag>();
}

看起來好長(zhǎng),但實(shí)際上只用到 @JoinTable 只有三個(gè)屬性:

  • name:數(shù)據(jù)庫(kù)里的中間關(guān)系表名(blog_tag_relation)
  • joinColumns:當(dāng)前表在關(guān)系表的鏈接字段(blog_id),一般我們會(huì)用 id
  • inverseJoinColumn:另一張表在關(guān)系表的鏈接字段(tag_id),一般我們會(huì)用 id

注意到我們使用 @JoinColumn 指定中間表的列,一定記住它使用的是數(shù)據(jù)庫(kù)字段。

對(duì)應(yīng)的表結(jié)構(gòu)如下:

Blog 表屬性語義
idID
其他屬性
Tag 表屬性語義
idID
其他屬性
blog_tag_relation 表屬性語義
blog_idBlog 的 ID
tag_idTag 的 ID

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的ArrayList容量及擴(kuò)容方式

    Java中的ArrayList容量及擴(kuò)容方式

    這篇文章主要介紹了Java中的ArrayList容量及擴(kuò)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java常見踩坑記錄之異常處理

    Java常見踩坑記錄之異常處理

    程序運(yùn)行時(shí)發(fā)生的不被期望的事件,它阻止了程序按照程序員的預(yù)期正常執(zhí)行,這就是異常,下面這篇文章主要給大家介紹了關(guān)于Java常見踩坑記錄之異常處理的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Spring + Spring Boot + MyBatis + MongoDB的整合教程

    Spring + Spring Boot + MyBatis + MongoDB的整合教程

    這篇文章主要給大家介紹了關(guān)于Spring + Spring Boot + MyBatis + MongoDB的整合教程,文中通過圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-12-12
  • Mybatis Plus代碼生成器(時(shí)間管理大師)

    Mybatis Plus代碼生成器(時(shí)間管理大師)

    這篇文章主要介紹了Mybatis Plus代碼生成器(時(shí)間管理大師)的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java更改圖片大小示例分享

    java更改圖片大小示例分享

    這篇文章主要介紹了java更改圖片大小示例,方法中指定路徑 ,舊文件名稱 ,新文件名稱,n 改變倍數(shù)就可以完成更改圖片大小,需要的朋友可以參考下
    2014-03-03
  • java反射機(jī)制的一些學(xué)習(xí)心得小結(jié)

    java反射機(jī)制的一些學(xué)習(xí)心得小結(jié)

    這篇文章主要給大家介紹了關(guān)于java反射機(jī)制的一些學(xué)習(xí)心得,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java實(shí)例講解注解的應(yīng)用

    Java實(shí)例講解注解的應(yīng)用

    JAVA注解?Annotation(注解)是JDK1.5及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時(shí)檢查。注解是以‘@注解名’在代碼中存在的
    2022-06-06
  • IDEA使用jformdesigner插件做管理系統(tǒng)MVC架構(gòu)的步驟和實(shí)現(xiàn)思路

    IDEA使用jformdesigner插件做管理系統(tǒng)MVC架構(gòu)的步驟和實(shí)現(xiàn)思路

    在?IntelliJ?IDEA?中結(jié)合?JFormDesigner?插件,通過?Swing?框架實(shí)現(xiàn)一個(gè)管理系統(tǒng)的?MVC?架構(gòu)是一種經(jīng)典的開發(fā)方式,以下是具體的步驟和實(shí)現(xiàn)思路,包含從項(xiàng)目創(chuàng)建到?MVC?架構(gòu)的核心代碼實(shí)現(xiàn),需要的朋友可以參考下
    2024-12-12
  • Java快速入門掌握類與對(duì)象及變量的使用

    Java快速入門掌握類與對(duì)象及變量的使用

    類和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域
    2022-04-04
  • java agent 使用及實(shí)現(xiàn)代碼

    java agent 使用及實(shí)現(xiàn)代碼

    java agent的作用可以在字節(jié)碼這個(gè)層面對(duì)類和方法進(jìn)行修改的技術(shù),能夠在不影響編譯的情況下,修改字節(jié)碼。本文主要給大家講解java agent 使用及實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2018-07-07

最新評(píng)論