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)文章
intellij idea 啟動(dòng)tomcat 1099端口被占用的解決
這篇文章主要介紹了intellij idea 啟動(dòng)tomcat 1099端口被占用的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09關(guān)于Socket的解析以及雙方即時(shí)通訊的java實(shí)現(xiàn)方法
本篇文章主要介紹了關(guān)于Socket的解析以及雙方通訊的java實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03form表單回寫技術(shù)java實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)form表單回寫技術(shù)的相關(guān)資料,需要的朋友可以參考下2016-04-04javamail實(shí)現(xiàn)注冊(cè)激活郵件
這篇文章主要為大家詳細(xì)介紹了javamail實(shí)現(xiàn)注冊(cè)激活郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04java對(duì)xml節(jié)點(diǎn)屬性的增刪改查實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇java對(duì)xml節(jié)點(diǎn)屬性的增刪改查實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10