这是我的注释类,我希望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;
}
}
答案 0 :(得分:19)
您应该创建一个包含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的这句excellent answer详细阐述了细节。您还可以查看我在前一段时间发布的this其他答案。
作为旁注,如果您可以控制数据库结构,也可以考虑避免使用复合键。 There are some reasons to do so
答案 1 :(得分:0)
您可以使用@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类即可作为系统上的实体使用。