簡體   English   中英

使用 Hibernate Get 和多列主鍵

[英]Using Hibernate Get with Multi-Column Primary Key

假設我有一個看起來像這樣的類:

public class MyClass {
  @Id
  @Column(name = "ID")
  private long Id;
}

我可以使用休眠會話對類進行獲取或加載,如下所示:

MyClass a = (MyClass)session.get(MyClass.class, new Long(100));

但是,假設我有一個以多列為主鍵的類:

public MyJoinClass implements Serializable {
  private static final long serialVersionUID = -5L;
  @Id
  @Column(name = "ID")
  private long id;

  @Id
  @Column(name = "EMAIL_ADDRESS_ID")
  private long emailAddressId;
}

是否可以對這樣的類使用 get 或 load?

嘗試使用@IdClass@EmbeddedId

public MyJoinClass implements Serializable {
  private static final long serialVersionUID = -5L;

  @EmbeddedId
  private MyJoinClassKey key;
}

public MyJoinClassKey implements Serializable{

  @Column(name = "ID")
  private long id;

  @Column(name = "EMAIL_ADDRESS_ID")
  private long emailAddressId;
}

然后使用

MyJoinClass a = (MyJoinClass )session.get(MyJoinClass .class, new MyJoinClassKey (1, "email"));

看一看這個問題, 被廣泛解釋。 基本上休眠有復合鍵的機制。

在 Hibernate 中是( 文檔):

MyJoinClass a = session.get(MyJoinClass.class, new MyJoinClass(100, 200));

只要確保有一個包含復合鍵所有部分的構造函數(不要忘記沒有參數的默認公共構造函數):

public MyJoinClass implements Serializable {
  private static final long serialVersionUID = -5L;
  @Id
  @Column(name = "ID")
  private long id;

  @Id
  @Column(name = "EMAIL_ADDRESS_ID")
  private long emailAddressId;

  public MyJoinClass() {}

  public MyJoinClass(long id, long emailAddressId) {
    this.id= id;
    this.emailAddressId= emailAddressId;
  }
}

暫無
暫無

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

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