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

Springboot?JPA級聯(lián)操作的實現(xiàn)(一對一、一對多、多對多)

 更新時間:2025年07月13日 11:36:30   作者:zhong_bao  
本文深入解析JPA中的一對一、一對多和多對多級聯(lián)操作,包括實體間的關系建立、查詢、保存、刷新和刪除等操作,具有一定的參考價值,感興趣的可以了解一下

自從接觸了JPA,就對立面的級聯(lián)操作很費解,特此做一下學習。JPA提供的Entity級聯(lián)可以建立一對一、一對多、多對多的關系,覆蓋查詢、保存、刷新、刪除等操作。

(1)一對一,@OneToOne

TUser與TGender成一對一關系

@Entity
@Data
@Table(name = "user",schema = "hr")
@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
public class TUser {
    @Id
    @GeneratedValue(generator="jpa-uuid")
    @Column(name = "user_id")
    private String id;

    @Column(name = "user_name")
    private String name;

    @Column(name = "user_describe")
    private String desc;

   //@JoinColumn的name指的是當前表user的字段gender_id,referencedColumnName指關聯(lián)表gender的字段id
    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.ALL})
    @JoinColumn(name = "gender_id",referencedColumnName = "id")
    private TGender genderId;
}

而TGender為:

@Entity
@Data
@Table(name = "gender",schema = "hr")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})
public class TGender {
    @Id
    @GenericGenerator(name = "jpa-uuid", strategy = "uuid")
    private String id;

    private String sex;
	
	//可維護可不維護,mappedBy就是被維護端,被TUser類中的屬性“genderId”維護
    @OneToOne(mappedBy = "genderId", cascade = {CascadeType.MERGE, CascadeType.REFRESH}, optional = false)
    private TUser tUser;

(2)一對多,@OneToMany 和 @ManyToOne

兩個是一起用的,以Company和User為例子,一個公司有多個職工

@Entity
@Data
@Table(name = "user",schema = "hr")
@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
public class TUser {
    @Id
    @GeneratedValue(generator="jpa-uuid")
    @Column(name = "user_id")
    private String id;

    @Column(name = "user_name")
    private String name;

    @Column(name = "user_describe")
    private String desc;

    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.ALL})
    @JoinColumn(name = "gender_id",referencedColumnName = "id")
    private TGender genderId;
   
    //@JoinColumn的name指的是當前表user的字段company_id,referencedColumnName指關聯(lián)表company的字段id
    @ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "company_id",referencedColumnName = "id")
    private TCompany companyId;
}

TCompany 為:

@Entity
@Data
@Table(name = "company",schema = "hr")
@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
public class TCompany {

    @Id
    @GeneratedValue(generator="jpa-uuid")
    private String id;

    private String name;
    
   //查詢時建議把userList忽略
   //可維護可不維護,mappedBy就是被維護端,被TUser類中的屬性“companyId”維護
    @OneToMany(mappedBy="companyId",cascade = {CascadeType.ALL})
    private List<TUser> userList;
}

(3)多對多,@ManyToMany

已TUser和TRole為例子

@Entity
@Data
@Table(name = "user",schema = "hr")
@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
public class TUser {
    @Id
    @GeneratedValue(generator="jpa-uuid")
    @Column(name = "user_id")
    private String id;

    @Column(name = "user_name")
    private String name;

    @Column(name = "user_describe")
    private String desc;

   //使用JoinTable屬性把中間表關聯(lián)起來,中間表主鍵為自增,joinColumns指的當前表user,name 屬性指向中間表的user_id,referencedColumnName 指向user中的id,inverseJoinColumns是role表,name 屬性指向中間表的role_id,referencedColumnName 指向role中的id
    @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST,CascadeType.REMOVE})
    @JoinTable(name = "user_role", schema = "hr",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
    private List<TRole> roleSet = new ArrayList<>();
}

TRole為:

@Entity
@Data
@Table(name = "role",schema = "hr")
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
public class TRole {

    @Id
    @GeneratedValue(generator="jpa-uuid")
    private String id;

    private String name;

    @Column(name = "role_desc")
    private String desc;
    
    //mappedBy就是被維護端,被TUser類中的屬性“roleSet”維護
    @ManyToMany(mappedBy = "roleSet",cascade = {CascadeType.PERSIST,CascadeType.REMOVE})
    private List<TUser> userSet = new ArrayList<>();
}

依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependencies>
    <!-- Compile -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- config -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.9.2</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- Test -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
  </dependencies>

到此這篇關于Springboot JPA級聯(lián)操作的實現(xiàn)(一對一、一對多、多對多)的文章就介紹到這了,更多相關Springboot JPA級聯(lián)操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入理解JAVA中的聚集和組合的區(qū)別與聯(lián)系

    深入理解JAVA中的聚集和組合的區(qū)別與聯(lián)系

    下面小編就為大家?guī)硪黄钊肜斫釰AVA中的聚集和組合的區(qū)別與聯(lián)系。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-05-05
  • 解決mybatisPlus null 值更新的問題

    解決mybatisPlus null 值更新的問題

    這篇文章主要介紹了解決mybatisPlus null 值更新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Spring?MVC??接受請求參數(shù)的方法

    Spring?MVC??接受請求參數(shù)的方法

    了解HTTP請求的GET和POST方法中如何攜帶參數(shù),以及SpringMVC中如何接收這些參數(shù),GET方法通過URL傳遞參數(shù),而POST方法通常在請求體中傳遞,SpringMVC使用注解如@RequestParam和@RequestBody來綁定參數(shù)到控制器方法
    2024-09-09
  • 解決idea找不到類could not find artifact問題

    解決idea找不到類could not find artifact問題

    本文總結了解決Java項目中找不到類的問題的常見解決方案,包括刷新Maven項目、清理IDEA緩存、Maven Clean Install、重新Package、解決依賴沖突和手動導入依賴包等方法
    2025-01-01
  • Java?不同版本的?Switch語句

    Java?不同版本的?Switch語句

    本文主要介紹了Java不同版本的Switch語句,自Java13以來,Switch表達式就被添加到Java核心庫中,下面我們將介紹舊的Java?Switch語句和新的Switch語句的區(qū)別,需要的朋友可以參考一下
    2022-06-06
  • 一文帶你了解SpringBoot中啟動參數(shù)的各種用法

    一文帶你了解SpringBoot中啟動參數(shù)的各種用法

    在使用 Spring Boot開發(fā)應用時,我們通常需要根據(jù)不同的環(huán)境或特定需求調整啟動參數(shù),那么,Spring Boot 提供了哪些方式來配置這些啟動參數(shù)呢,下面小編就來和大家介紹一下吧
    2025-03-03
  • 使用MAT進行JVM內(nèi)存分析實例

    使用MAT進行JVM內(nèi)存分析實例

    這篇文章主要介紹了使用MAT進行JVM內(nèi)存分析實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java中Spring監(jiān)聽器的多種使用方式

    Java中Spring監(jiān)聽器的多種使用方式

    文章介紹了Spring事件監(jiān)聽模型中的注解使用方式,重點講解了@EventListener和@TransactionalEventListener的使用場景和參數(shù),文章還提到在實際項目中,由于需要處理事務和緩存問題,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • java實現(xiàn)五子棋小游戲

    java實現(xiàn)五子棋小游戲

    這篇文章主要介紹了java實現(xiàn)五子棋小游戲的相關資料,十分簡單實用,推薦給大家,需要的朋友可以參考下
    2015-03-03
  • Java高效讀取大文件實例分析

    Java高效讀取大文件實例分析

    這篇文章主要介紹了Java高效讀取大文件實例分析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論

曲麻莱县| 苍南县| 商丘市| 弥渡县| 瑞金市| 宣汉县| 霍林郭勒市| 阳新县| 会泽县| 洪泽县| 聊城市| 古浪县| 尼勒克县| 崇文区| 磐安县| 宣威市| 巴马| 杭锦旗| 嘉荫县| 林口县| 综艺| 汉中市| 阿图什市| 安达市| 乐亭县| 乌鲁木齐县| 井研县| 瓮安县| 南丹县| 扬中市| 尉氏县| 宁河县| 漳浦县| 阿克| 中卫市| 梓潼县| 乾安县| 英超| 寿光市| 睢宁县| 同仁县|