[英]How to use two foreign keys as primary key on Hibernate entity annotation
[英]how to make two column as a primary key in hibernate annotation class
這是我的注釋類,我希望userId
和groupId
列都為主鍵。 我發現了與此有關的更多問題( Question ),但未找到相關答案。 我的聲譽較差,所以我無法在帖子中發表評論,所以我將我的問題放在這里。
這是我的代碼。
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.NaturalId;
@Entity
@Table(name="user_group")
public class user_group {
@Column(name="serviceProvider")
private String serviceProvider;
@Column(name="enterpriseId")
private String enterpriseId;
@Column(name="department")
private String department;
@Column(name="trunkGroupName")
private String trunkGroupName;
@Id
@Column(name="userId")
private String userId;
@Column(name="groupId")
private String group;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String getServiceProvider() {
return serviceProvider;
}
public void setServiceProvider(String serviceProvider) {
this.serviceProvider = serviceProvider;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getTrunkGroupName() {
return trunkGroupName;
}
public void setTrunkGroupName(String trunkGroupName) {
this.trunkGroupName = trunkGroupName;
}
}
您應該創建一個包含PK字段的新@Embeddable
類:
@Embeddable
public class user_groupId implements Serializable {
@Column(name="userId")
private String userId;
@Column(name="groupId")
private String group;
}
並在@Entity
中將其用作@EmbeddedId
:
@Entity
public class user_group {
@EmbeddedId
user_groupId id;
...
}
您也可以使用@IdClass
批注實現此效果。
Pascal Thivent的出色回答詳細說明了細節。 您也可以看看這個其他答案,我前一段時間發布到一個幾乎相同的問題。
附帶說明一下,如果您可以控制數據庫結構,則還可以考慮避免使用復合鍵。 這樣做有一些原因 。
您可以使用@UniqueConstraint批注在休眠中創建復合主鍵。
@Table(name="user_group",uniqueConstraints=@UniqueConstraint(columnNames= {"userId","groupId"}))
public class user_group
{
@Column(name="userId")
private String userId;
@Column(name="groupId")
private String group;
}
如果我們使用spring,上述方法是不可行的,因為對於創建復合主鍵,我們必須創建一個類不是一件好事。
在冬眠和春季,您只需創建POJO類即可作為系統上的實體使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.