Spring Data JPA 建立表的聯(lián)合主鍵
最近遇到了一個小的問題,就是怎么使用 Spring Data JPA 建立表的聯(lián)合主鍵?然后探索出了下面的兩種方式。
第一種方式:
第一種方式是直接在類屬性上面的兩個字段都加上 @Id 注解,就像下面這樣,給 stuNo 和 stuName 這兩個字段加上聯(lián)合主鍵:
@Entity
@Table(name = "student")
public class Student {
@Id
@Column(name = "stu_no", nullable = false, length = 11)
private Integer stuNo;
@Id
@Column(name = "stu_name", nullable = false, length = 128)
private String stuName;
@Column(name = "stu_age", nullable = false, length = 3)
private Integer stuAge;
@Column(name = "class_id", nullable = false, length = 8)
private String classId;
}
只不過需要注意的是,實體類需要實現(xiàn) Serializable 接口。
這種方式不是很好,雖然可以成功的創(chuàng)建表,但是使用 JpaRepository 的時候,需要指定主鍵 ID 的類型,這時候就會報錯,所以使用第二種方式更好。
第二種方式:
實現(xiàn)起來也很簡單,我們需要新建一個類,還是以 stuNo 和 stuName 建立聯(lián)合主鍵,這個類需要實現(xiàn) Serializable 接口。
public class StudentUPK implements Serializable {
private Integer stuNo;
private String stuName;
}
然后在實體類 Student 上面加上 @IdClass 注解,兩個字段上面還是加上 @Id 注解:
@Entity
@IdClass(StudentUPK.class)
@Table(name = "student")
public class Student {
@Id
@Column(name = "stu_no", nullable = false, length = 11)
private Integer stuNo;
@Id
@Column(name = "stu_name", nullable = false, length = 128)
private String stuName;
@Column(name = "stu_age", nullable = false, length = 3)
private Integer stuAge;
@Column(name = "class_id", nullable = false, length = 8)
private String classId;
}
這樣就能成功的創(chuàng)建表了,而且在使用 JpaRepoistory 的時候,可以指定主鍵為那個 StudentUPK 類,就像這樣:public interface StudentRepository extends JpaRepository<Student, StudentUPK> 。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud @FeignClient注入Spring容器原理分析
本文詳細分析了Spring Boot中@FeignClient注解的掃描和注入過程,重點探討了@EnableFeignClients注解的工作原理,通過源碼分析,揭示了@EnableFeignClients如何通過@Import注解和FeignClientsRegistrar類實現(xiàn)bean定義的加載2024-12-12
java并發(fā)請求下數(shù)據(jù)插入重復問題的解決方法
現(xiàn)在遇到一個項目,移動設備存儲數(shù)據(jù),然后一起上傳,那就出現(xiàn)了許多重復數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java并發(fā)請求下數(shù)據(jù)插入重復問題的解決方法,需要的朋友可以參考下2021-11-11
Java?8函數(shù)式接口之Consumer用法示例詳解
這篇文章主要為大家介紹了Java?8函數(shù)式接口之Consumer用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
Java數(shù)據(jù)結(jié)構(gòu)優(yōu)先隊列實練
通常都把隊列比喻成排隊買東西,大家都很守秩序,先排隊的人就先買東西。但是優(yōu)先隊列有所不同,它不遵循先進先出的規(guī)則,而是根據(jù)隊列中元素的優(yōu)先權(quán),優(yōu)先權(quán)最大的先被取出,這篇文章主要介紹了java優(yōu)先隊列的真題,感興趣的朋友一起看看吧2022-07-07

