在提供的程式碼中,為 Time 表定義了一個複合鍵,其中 levelStation 和 confPathID 作為其組件。要在 JPA 和 Hibernate 中對應此組合鍵,您有兩個選擇:@EmbeddedId 和 @IdClass。
@IdClass 註解可讓您將實體的多個欄位對應到形成複合主鍵。這需要定義一個表示主鍵的類別。在這種情況下,TimePK 類別可以定義如下:
@IdClass(TimePK.class) public class Time implements Serializable { // ... }
這裡,TimePK 是一個單獨的類,必須定義無參數建構子、主鍵欄位的getters/setters 和equals( ) 和hashCode( ) 方法。
@EmbeddedId 註解映射嵌入類別到實體的主鍵。與@IdClass相反,這種方法結合了實體類別和主鍵類別。以下是使用@EmbeddedId 的方法:
@Entity class Time implements Serializable { @EmbeddedId private TimePK timePK; // ... }
在這種情況下,TimePK 是Time 實體的內部類,還必須定義一個無參數構造函數、關鍵字段的getters/setters 和equals ( ) 和hashCode() 方法。
@IdClass 和 @EmbeddedId 之間的主要區別在於它們對查詢語法的影響。使用 @IdClass,您可以直接透過實體存取主鍵字段,而使用 @EmbeddedId,您可以透過嵌入類別上的 getter 存取它。
在兩者之間進行選擇時,@EmbeddedId 傳達了這樣的事實主鍵在域模型中具有有意義的標識,而@IdClass 表明主鍵只是唯一標識該域的字段的組合
JPA 1.0規格:
以上是如何使用 @EmbeddedId 與 @IdClass 在 JPA 和 Hibernate 中映射複合鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!