繁体   English   中英

如何在休眠注释类中将两列用作主键

[英]how to make two column as a primary key in hibernate annotation class

这是我的注释类,我希望userIdgroupId列都为主键。 我发现了与此有关的更多问题( 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM