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

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

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

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

(1)一對一,@OneToOne

TUser與TGender成一對一關(guān)系

@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指的是當(dāng)前表user的字段gender_id,referencedColumnName指關(guān)聯(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指的是當(dāng)前表user的字段company_id,referencedColumnName指關(guān)聯(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屬性把中間表關(guān)聯(lián)起來,中間表主鍵為自增,joinColumns指的當(dāng)前表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>

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

相關(guān)文章

  • JAVA TIMER簡單用法學(xué)習(xí)

    JAVA TIMER簡單用法學(xué)習(xí)

    Timer類是用來執(zhí)行任務(wù)的類,它接受一個TimerTask做參數(shù)
    2013-07-07
  • SpringBoot3.0整合chatGPT的完整步驟

    SpringBoot3.0整合chatGPT的完整步驟

    ChatGPT是OpenAI推出的一個語言模型系統(tǒng),它能夠?qū)崟r回答用戶提問,包括聊天、糾正語法錯誤,甚至是寫代碼、寫劇本等,由于可玩性很高,迅速在全球范圍內(nèi)風(fēng)靡起來,下面這篇文章主要給大家介紹了關(guān)于SpringBoot3.0整合chatGPT的完整步驟,需要的朋友可以參考下
    2022-12-12
  • mybatis 新增返回id的實現(xiàn)

    mybatis 新增返回id的實現(xiàn)

    Mybatis插入數(shù)據(jù)時,可以通過兩種方式返回生成的ID,兩種方式都需要在實體類中提供userId的getter和setter方法,本文就詳細(xì)的介紹一下這兩種方法,感興趣的可以了解一下
    2024-09-09
  • idea全局設(shè)置Maven配置的實現(xiàn)步驟

    idea全局設(shè)置Maven配置的實現(xiàn)步驟

    本文主要介紹了idea全局設(shè)置Maven配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Jmeter安裝及配置教程詳解

    Jmeter安裝及配置教程詳解

    很多朋友私信小編Jmeter安裝及配置教程能出一期教程嗎?正巧趕上疫情,不是太忙,下面小編把Jmeter安裝及配置教程分享到腳本之家平臺,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Springboot使用jsp具體案例解析

    Springboot使用jsp具體案例解析

    這篇文章主要介紹了Springboot使用jsp具體案例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java實現(xiàn)微信公眾號自定義菜單的創(chuàng)建方法示例

    Java實現(xiàn)微信公眾號自定義菜單的創(chuàng)建方法示例

    這篇文章主要介紹了Java實現(xiàn)微信公眾號自定義菜單的創(chuàng)建方法,結(jié)合實例形式分析了java創(chuàng)建微信公眾號自定義菜單的具體步驟、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-10-10
  • Guava輕松創(chuàng)建和管理不可變集合方法技巧

    Guava輕松創(chuàng)建和管理不可變集合方法技巧

    這篇文章主要為大家介紹了Guava輕松創(chuàng)建和管理不可變集合方法技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java 中的 DataInputStream 介紹_動力節(jié)點Java學(xué)院整理

    Java 中的 DataInputStream 介紹_動力節(jié)點Java學(xué)院整理

    DataInputStream 是數(shù)據(jù)輸入流。它繼承于FilterInputStream。接下來通過本文給大家介紹Java 中的 DataInputStream的相關(guān)知識,需要的朋友參考下吧
    2017-05-05
  • vscode開發(fā)maven的javaweb項目并部署到tomcat及配置指南

    vscode開發(fā)maven的javaweb項目并部署到tomcat及配置指南

    這篇文章主要給大家介紹了關(guān)于vscode開發(fā)maven的javaweb項目并部署到tomcat及配置的相關(guān)資料,在vscode中創(chuàng)建maven項目,需要逐一操作下面的環(huán)節(jié),文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評論