1. 程式人生 > 其它 >JPA 複合主鍵

JPA 複合主鍵

參考連結:https://www.cnblogs.com/boywwj/p/8031106.html、https://www.cnblogs.com/lich/archive/2011/12/03/2274672.html


  1.複合主鍵定義:

    一張表存在多個欄位共同組成一個主鍵,這多個欄位的組合不能重複,但是單獨一個可以重複。

  2.思路:

    STEP 1:需求

    資料庫中的表沒有主鍵,而是由複合主鍵代替。但專案中所需的程式規定,必須要設定主鍵,即有這樣的標識:

 /**    使用者Id*/
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name 
= "id" ,length = 32) String id;

    STEP 2:建立複合主鍵

    但因為專案中設定的是複合主鍵,所以不能使用這樣的形式來設定主鍵,要新建一個複合主鍵類:

import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;

@Data
@Embeddable
public class Key implements Serializable {

    /***/
    @Column(name = "firstName" ,length = 32)
    String firstName;

    
/***/ @Column(name = "lastName" ,length = 32) String lastName; }

    STEP 3:插入複合主鍵

    建立複合主鍵類後,將複合主鍵以下列形式寫入程式即可。

import lombok.Data;
import javax.persistence.*;

@Entity
@Data
@Table(name = "student")
public class Student {

 /** 姓名的複合主鍵 */
  @EmbeddedId
  private Key id;


 /** 祖先節點和孫子節點的距離 
*/ @Column(name = "age" ,length = 11) Integer age; }

  使用注意:

  1)實現Serializable介面(否則會報錯,錯誤會直接顯示);

  2) 在複合主鍵的類上,使用註解@Embeddable

  3) 有預設的public無引數的構造方法(在我這個例項中,我沒有新增有參構造方法,所以採用預設的構造方法)。如果你在實體類裡有有參構造方法,那麼一定要有一個無參構造方法,否則執行的時候會報錯。

  4)重寫equalshashCode方法。equals方法用於判斷兩個物件是否相同,EntityManger通過find方法來查詢Entity時,是根據equals的返回值來判斷的。hashCode方法返回當前物件的雜湊碼(我驗證EntityManger,不重寫也沒事。);