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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
intellij idea 啟動tomcat 1099端口被占用的解決
這篇文章主要介紹了intellij idea 啟動tomcat 1099端口被占用的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09關(guān)于Socket的解析以及雙方即時通訊的java實現(xiàn)方法
本篇文章主要介紹了關(guān)于Socket的解析以及雙方通訊的java實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03java對xml節(jié)點屬性的增刪改查實現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava對xml節(jié)點屬性的增刪改查實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10