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

Spring?Data?JPA關(guān)系映射@OneToOne實例解析

 更新時間:2023年08月17日 10:21:03   作者:虛驚一百場  
這篇文章主要為大家介紹了Spring?Data?JPA關(guān)系映射@OneToOne實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

@OneToOne

表示一對一的映射關(guān)系,比如一個賬號對應(yīng)一個用戶,一個實體用來描述賬號的信息(賬號,密碼,賬號是否可用,賬號對應(yīng)的角色等),另外一個實體用來描述用戶的信息(昵稱,性別,國籍等)。

屬性

該注解有六個屬性:

public @interface OneToOne {
    java.lang.Class targetEntity() default void.class;
    javax.persistence.CascadeType[] cascade() default {};
    javax.persistence.FetchType fetch() default javax.persistence.FetchType.EAGER;
    boolean optional() default true;
    java.lang.String mappedBy() default "";
    boolean orphanRemoval() default false;
}
  • targetEntity 關(guān)聯(lián)目標實體類,指定類型后該屬性可省略;
  • cascade表示關(guān)聯(lián)關(guān)系中的級聯(lián)操作權(quán)限,有五種權(quán)限:

    • CascadeType.PERSIST:級聯(lián)新增(又稱級聯(lián)保存);
    • CascadeType.MERGE:級聯(lián)合并,更新該實體時,與其有映射關(guān)系的實體也跟隨更新;
    • CascadeType.REMOVE:級聯(lián)刪除,刪除該實體時,與其有映射關(guān)系的實體也跟隨刪除;
    • CascadeType.REFRESH:級聯(lián)刷新,該實體被操作前都會刷新,保證數(shù)據(jù)合法性;
    • CascadeType.ALL:包含以上四種級聯(lián)操作;
  • fetch數(shù)據(jù)加載策略,默認值為FetchType.EAGER

    • FetchType.LAZY 表示數(shù)據(jù)獲取方式為懶加載;
    • FetchType.EAGER 表示數(shù)據(jù)獲取方式為急加載;
  • optional 表示關(guān)聯(lián)關(guān)系是否必須,當該值為true時,one的一方可以為null;
  • mappedBy 指定映射關(guān)系由哪一方維護,一般使用在雙向映射場景;
  • orphanRemoval 孤值刪除,將會刪除孤立數(shù)據(jù),外鍵為null的數(shù)據(jù)將被刪除;

關(guān)聯(lián)關(guān)系

我們在使用的時候,通常為了保證表的簡潔性,將主鍵共享,意思是用戶的id和賬號的id是一樣的,不在表中單獨存在一個字段用來描述關(guān)聯(lián)關(guān)系;比如下面的例子:

創(chuàng)建賬號實體

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import javax.persistence.*;
@Table(name = "base_account")
@Entity
@org.hibernate.annotations.Table(appliesTo = "base_account", comment = "賬號信息表")
public class AccountDO {
    @Id
    @GenericGenerator(name="idGenerator", strategy = "uuid")
    @GeneratedValue(generator = "idGenerator")
    @Column(name = "ACCOUNT_ID", length = 32)
    private String accountId;
    @Column(name = "USERNAME", columnDefinition = "VARCHAR(32) NOT NULL COMMENT '賬號'")
    private String username;
    @Column(name = "PASSWORD", columnDefinition = "VARCHAR(128) NOT NULL COMMENT '密碼'")
    private String password;
    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.REFRESH})
    @PrimaryKeyJoinColumn
    private UserDO userDO;
    // 省略構(gòu)造函數(shù),get/set方法,toString方法等

創(chuàng)建一個用戶信息實體

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import javax.persistence.*;
@Table(name = "base_user")
@Entity
@org.hibernate.annotations.Table(appliesTo = "base_user", comment = "用戶信息表")
public class UserDO {
    @Id
    @GenericGenerator(name = "idGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "accountDO"))
    @GeneratedValue(generator = "idGenerator")
    @Column(name = "USER_ID", length = 32)
    private String userId;
    @Column(name = "NICKNAME", columnDefinition = "VARCHAR(32) NOT NULL COMMENT '昵稱'")
    private String nickname;
    @Column(name = "SEX", columnDefinition = "CHAR(2) DEFAULT NULL COMMENT '性別'")
    private String sex;
    @OneToOne(mappedBy = "userDO")
    private AccountDO accountDO;
        // 省略構(gòu)造函數(shù),get/set方法,toString方法等

用戶實體的主鍵和賬號實體的主鍵都使用一個生成策略,生成的id也一樣,且在賬號實體中使用@PrimaryKeyJoinColumn來聲明在表中不建立對應(yīng)的映射字段。

這里貼出源碼,一個關(guān)系映射的小例子

以上就是Spring Data JPA關(guān)系映射@OneToOne實例解析的詳細內(nèi)容,更多關(guān)于Spring Data JPA @OneToOne的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mybatis-Plus中update()和updateById()將字段更新為null

    Mybatis-Plus中update()和updateById()將字段更新為null

    本文主要介紹了Mybatis-Plus中update()和updateById()將字段更新為null,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java中日期格式化YYYY-DD的操作bug

    Java中日期格式化YYYY-DD的操作bug

    這篇文章主要介紹了Java中日期格式化YYYY-DD中遇到的坑,本文給大家分享到腳本之家平臺,需要的朋友可以參考下
    2020-01-01
  • Java實現(xiàn)辦公文檔在線預(yù)覽功能

    Java實現(xiàn)辦公文檔在線預(yù)覽功能

    java實現(xiàn)辦公文件在線預(yù)覽功能是一個大家在工作中也許會遇到的需求,這篇文章就教大家如何實現(xiàn)這一功能,感興趣的小伙伴可以了解一下
    2021-12-12
  • mybatis 批量將list數(shù)據(jù)插入到數(shù)據(jù)庫的實現(xiàn)

    mybatis 批量將list數(shù)據(jù)插入到數(shù)據(jù)庫的實現(xiàn)

    這篇文章主要介紹了mybatis 批量將list數(shù)據(jù)插入到數(shù)據(jù)庫的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Mybatis 傳輸List的實現(xiàn)代碼

    Mybatis 傳輸List的實現(xiàn)代碼

    本文通過實例代碼給大家介紹了mybatis傳輸list的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • Maven中Could not find artifact XXXX的錯誤解決

    Maven中Could not find artifact XXXX的錯誤解決

    本文主要介紹了Maven中Could not find artifact XXXX的錯誤解決,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java Spring的refresh方法你知道嗎

    Java Spring的refresh方法你知道嗎

    這篇文章主要為大家詳細介紹了Java Spring的refresh方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java反射(JDK)與動態(tài)代理(CGLIB)詳解

    Java反射(JDK)與動態(tài)代理(CGLIB)詳解

    下面小編就為大家?guī)硪黄獪\談Java反射與動態(tài)代理。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-08-08
  • Java程序執(zhí)行時間的2種簡單方法

    Java程序執(zhí)行時間的2種簡單方法

    這篇文章介紹了Java程序執(zhí)行時間的2種簡單方法,有需要的朋友可以參考一下
    2013-09-09
  • Jenkins安裝maven環(huán)境搭建方式

    Jenkins安裝maven環(huán)境搭建方式

    這篇文章主要介紹了Jenkins安裝maven環(huán)境搭建方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論

盐山县| 徐闻县| 德惠市| 蒙自县| 连平县| 漳平市| 南开区| 温泉县| 揭西县| 兰州市| 浦江县| 云南省| 清远市| 四平市| 凤山县| 广丰县| 舞阳县| 大名县| 潼关县| 澜沧| 南澳县| 襄垣县| 武汉市| 平和县| 历史| 邢台县| 孟村| 锦州市| 安新县| 读书| 深水埗区| 旬阳县| 彩票| 永和县| 萨嘎县| 张家口市| 勃利县| 特克斯县| 洪洞县| 晋宁县| 太康县|