如何在hibernate注释类中使两列作为主键

2024-03-29

这是我的注释类,我想要userId and groupId列都作为主键。 我发现了更多问题(Question https://stackoverflow.com/q/10422680/3156758)关于这个,但没有找到相关答案。 我的声誉较差,所以我无法对帖子发表评论,所以我在这里提出我的问题。

这是我的代码..

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
public class user_groupId implements Serializable { 
    @Column(name="userId")
    private String userId;

    @Column(name="groupId")
    private String group;
}

并使用它在@Entity as an @EmbeddedId:

@Entity
public class user_group {

    @EmbeddedId
    user_groupId id;

    ...
}

您还可以使用@IdClass对此效果的注释。

This 很好的答案 https://stackoverflow.com/a/3588400/851811Pascal Thivent 详细阐述了细节。您还可以看看this https://stackoverflow.com/a/14729424/851811我前段时间发布了一个几乎相同的问题的其他答案。

顺便说一句,如果您可以控制数据库结构,您也可以考虑避免使用复合键。这样做有一些原因 https://stackoverflow.com/a/11836573/851811.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在hibernate注释类中使两列作为主键 的相关文章

随机推荐