这是我的注释类,我想userId同时将groupId列作为主键。我发现了与此有关的更多问题,但未找到相关答案。我的声誉较差,所以我无法在帖子中发表评论,所以我将我的问题放在这里。
userId
groupId
这是我的代码。
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; } }
您应该创建一个@Embeddable包含PK字段的新类:
@Embeddable
@Embeddable public class user_groupId implements Serializable { @Column(name="userId") private String userId; @Column(name="groupId") private String group; }
并将其@Entity用作@EmbeddedId:
@Entity
@EmbeddedId
@Entity public class user_group { @EmbeddedId user_groupId id; ... }
您也可以使用@IdClass注释来达到这种效果。
@IdClass
这出色答卷由帕斯卡尔Thivent阐述了细节。您也可以看看这个其他答案,我前一段时间发布到一个几乎相同的问题。
附带说明一下,如果您可以控制数据库结构,则还可以考虑避免使用复合键。