[英]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.