簡體   English   中英

休眠中的復合鍵

[英]Composite Key in Hibernate

Java Persistence with Hibernate顯示了如何創建復合鍵:

@Entity
@Table(name = "CATEGORIZED_ITEM")
  public class CategorizedItem {

  @Embeddable
  public static class Id implements Serializable {

      @Column(name = "CATEGORY_ID")
      private Long categoryId;

      @Column(name = "ITEM_ID")
      private Long itemId;

      public Id() {}
      public Id(Long categoryId, Long itemId) {
          this.categoryId = categoryId;
          this.itemId = itemId;
      }

      public boolean equals(Object o) {
          if (o != null && o instanceof Id) {
              Id that = (Id)o;
              return this.categoryId.equals(that.categoryId) &&
                  this.itemId.equals(that.itemId);
          } else {
              return false;
          }
      }
      public int hashCode() {
          return categoryId.hashCode() + itemId.hashCode();
      }
  }

@EmbeddedId
private Id id = new Id();

@Column(name = "ADDED_BY_USER")
private String username;

@Column(name = "ADDED_ON")
private Date dateAdded = new Date();

制作復合鍵時,使Id 靜態化是否通用? 如果是這樣,為什么?

為什么必須在CategorizedItem實例化Id

private Id id = new Id();

實際上,您可以通過兩種方式指定組合鍵,一種是@EmbeddedId ,另一種是ID類: @IdClass 這是一個很好的教程,向您展示了這些選項,並提供了有關如何使用兩種組合鍵說明符樣式的建議: http : //www.objectdb.com/java/jpa/entity/id

我個人還沒有看到使用該鍵將主鍵類嵌入到該類中,但是如果不需要在其他任何地方使用該鍵類,那將是有意義的。 公共靜態嵌套類與根級別類基本相同,僅表明該類與其封閉類有緊密的聯系。

至於創建類的實例,我認為大多數示例都是通過構造函數來完成的。 顯然,在嘗試將實體持久保存到數據庫之前,必須為主鍵組件提供值。 這是一個典型的示例: http : //www.java2s.com/Tutorial/Java/0355__JPA/EmbeddedCompoundPrimaryKey.htm

暫無
暫無

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

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