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

