如何将两列作为hibernate注记类中的主键 [英] how to make two column as a primary key in hibernate annotation class
问题描述
这是我的注释类,我希望 userId
和 groupId
列作为主键。
我发现了更多问题(问题),但没有找到相关答案。
我声望较低,所以我无法评论帖子,所以我在这里提出我的问题。
这是我的代码.. p>
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)
私有字符串组;
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;
}
}
@Embeddable
类,其中包含PK字段: @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的出色的答案详细阐述了细节。您还可以查看这个其他答案,前一段时间我发布了一个几乎相同的问题。
请注意,如果您已经控制了数据库结构,那么您也可以考虑避免组合键。 这样做有一些原因。
This is my annotation class and i want userId
and groupId
column both as primary key.
I have found more questions (Question) about this, but didn't found relevant answer.
I have less reputation, so I am not able to comment on posts, So I am putting my question here.
This is my code..
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;
}
}
You should create a new @Embeddable
class containing the PK fields:
@Embeddable
public class user_groupId implements Serializable {
@Column(name="userId")
private String userId;
@Column(name="groupId")
private String group;
}
And use it in the @Entity
as an @EmbeddedId
:
@Entity
public class user_group {
@EmbeddedId
user_groupId id;
...
}
You could also use the @IdClass
annotation to that effect.
This excellent answer by Pascal Thivent elaborates on the details. You can also take a look at this other answer I posted to a almost identical question some time ago.
As a side note, if you've got control over the DB structure, you might also consider avoiding composite keys. There are some reasons to do so.
这篇关于如何将两列作为hibernate注记类中的主键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!