簡體   English   中英

為JPA / Hibernate與人工Long ID創建復合密鑰

[英]Creating composite key for JPA/Hibernate vs artificial Long id

在jpa中僅具有兩列(都是主鍵的一部分)的實體中映射實體的更好方法是什么?

  1. 自引用實體Java類作為主鍵
  2. 為主鍵創建POJO
  3. 引入“長ID”作為人工ID,以避免映射復合鍵

您所要求的聽起來像是多對多關系。 如果沒有其他選擇,只能為此創建一個實體,這就是您要做的。

首先 ,創建您的可嵌入復合密鑰

@Embeddable
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BaseKey {
    private String a;
    private String b;
}

其次 ,創建您的實體

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AnyEntity {

    @EmbeddedId
    private BaseKey key;

}

我將選擇選項3,將surrogate key為Long Id。 因為您希望避免在復合鍵的一部分發生更改的情況下更新多行。 還應注意,甚至索引引用也必須更新。

例如-在下面的情況下,假設公司ID /雇員沒有更改,那么在雇員和電話表的情況下,您將需要更新多行。

Employee                    Phone   
---------                   --------
Company ID (PK)             Phone no
Employee No (PK)            Company ID (FK)
Name                        Employee No (FK)

相反,如果您在Employee中添加代理密鑰,則在Employee表中僅單個更新。

Employee                    Phone   
---------                   --------
ID (PK)                     Phone no
Company ID (UK)             Employee ID (FK)
Employee No (UK)            
Name                        

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM