最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、@JoinColumn

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

就是我們在數(shù)據(jù)庫設計時常說的一對多、多對一、多對多關(guān)系。

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

二、name 和 referencedColumnName

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

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

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

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

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

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

  • name:當前表的字段
  • referencedColumnName:引用表對應的字段,如果不注明,默認就是引用表的主鍵

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

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

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

很多網(wǎng)上的解釋說 name 指的是外鍵名、實體字段名,其實都不是很準確,容易混淆,還是要動手做一下。

了解了JoinColumn 不妨進一步了解下 @JoinTable 的 JoinColumn 屬性,這個也是比較容易混淆的。

三、@JoinTable 的 JoinColumn 屬性

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

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

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

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

下面從 《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>();
}

看起來好長,但實際上只用到 @JoinTable 只有三個屬性:

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

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

對應的表結(jié)構(gòu)如下:

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

總結(jié)

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

相關(guān)文章

  • Eclipse/MyEclipse轉(zhuǎn)IntelliJ IDEA完全攻略(圖文)

    Eclipse/MyEclipse轉(zhuǎn)IntelliJ IDEA完全攻略(圖文)

    這篇文章主要介紹了Eclipse/MyEclipse轉(zhuǎn)IntelliJ IDEA完全攻略(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Springboot mybais配置多數(shù)據(jù)源過程解析

    Springboot mybais配置多數(shù)據(jù)源過程解析

    這篇文章主要介紹了Springboot+mybais配置多數(shù)據(jù)源過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    這篇文章主要介紹了Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Maven build 命令介紹的使用詳解

    Maven build 命令介紹的使用詳解

    這篇文章主要介紹了Maven build 命令介紹的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java字節(jié)緩存流的構(gòu)造方法之文件IO流

    Java字節(jié)緩存流的構(gòu)造方法之文件IO流

    這篇文章主要介紹了Java字節(jié)緩存流的構(gòu)造方法之文件IO流,同時也介紹了字符流中的一些相關(guān)的內(nèi)容,并且通過大量的案例供大家理解。最后通過一些經(jīng)典的案例幫助大家對前面所學的知識做了一個綜合的應用,需要的朋友可以參考一下
    2022-04-04
  • java中的final關(guān)鍵字詳解及實例

    java中的final關(guān)鍵字詳解及實例

    這篇文章主要介紹了 java中的final關(guān)鍵字詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • java編程之單元測試(Junit)實例分析(附實例源碼)

    java編程之單元測試(Junit)實例分析(附實例源碼)

    這篇文章主要介紹了java編程之單元測試(Junit),結(jié)合實例形式較為詳細的分析總結(jié)了Java單元測試的原理、步驟及相關(guān)注意事項,并附帶了完整代碼供讀者下載參考,需要的朋友可以參考下
    2015-11-11
  • spring整合mybatis的底層原理分析

    spring整合mybatis的底層原理分析

    這篇文章主要介紹了spring整合mybatis的底層原理分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • SpringMVC中處理Http請求的原理詳解

    SpringMVC中處理Http請求的原理詳解

    這篇文章主要介紹了SpringMVC中處理Http請求的原理詳解,當一個http請求過來了首先經(jīng)過的是DispatcherServlet這么一個前端控制器并調(diào)用了這個前端控制器的doService方法,這個方法最終我們發(fā)現(xiàn)它調(diào)用了doDispatcher這么一個方法,需要的朋友可以參考下
    2023-12-12
  • java 如何復制非空對象屬性值

    java 如何復制非空對象屬性值

    這篇文章主要介紹了java 如何復制非空對象屬性值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

平阴县| 英德市| 邻水| 民丰县| 岑溪市| 阿勒泰市| 安泽县| 郴州市| 什邡市| 昭平县| 民勤县| 双城市| 惠安县| 嘉鱼县| 广德县| 长沙县| 海盐县| 永康市| 淮南市| 临武县| 南康市| 台北县| 育儿| 防城港市| 綦江县| 简阳市| 浦县| 新平| 万源市| 德化县| 治多县| 新丰县| 图片| 涪陵区| 平舆县| 阳原县| 澄江县| 宜章县| 洛川县| 凤冈县| 沙湾县|