如何在数据库中映射JPA实体和2个主键

时间:2014-10-23 08:47:48

标签: java hibernate jpa

在我的数据库模型中,我有2个主键。我正在使用JPA和hibernate。

我的数据库模型就像


USR_INFO_TBL

COMPANY_ID
PERSONAL_ID
FIRST_NAME
LAST_NAME
电子邮件
USR_INFO_TBL_PK


现在我的JPA实体如下所示

 @Entity 
 @Table("USR_INFO_TBL")
 public class UerInfo{
@ID(name ="COMPANY_ID")
private String companyID;

private String personalID;   //what should i write here
@COLUMN(name="firstName") 
private String firstName;

@COLUMN(name="lastName ")
private String lastName;

@COLUMN(name="email")
private String email;

//setters and getters
}

如何将2个主键映射到JPA实体 你能不能修改上面的代码。我经历了一些帖子,因为我是JPA和HIBERNATE概念的新手。我很困惑

由于

3 个答案:

答案 0 :(得分:1)

您应该创建一个使用@Embeddable注释的类,其中包含复合键的组件,并且在当前的User实体中,您应该使用此新类型创建一个字段。

@Entity 
@Table("INFO_USR_TBL")
public class User {
    @EmbeddedId
    private UserId id;

    @Column(name="firstName") 
    private String firstName;

    @Column(name="lastName")
    private String lastName;

    @Column(name="email")
    private String email;

    //setters and getters
}

@Embeddable
public class UserId {
    @Column(name="COMPANY_ID")
    String companyId;
    @Column(name="PERSONAL_ID")
    String personalId;
}

答案 1 :(得分:1)

在JPA规范中,它声明“复合主键必须表示并映射为可嵌入类,或者必须表示为id类并映射 到实体类的多个字段或属性“。

您可以将代码更改为:

public class UserId {
    String companyId;
    String personalId;
}

@Entity 
@Table(name="INFO_USR_TBL")
@IdClass(UserId.class)
public class User {

    @Id
    @Column(name ="COMPANY_ID")
    private String companyID;
    @Id
    @Column(name ="PERSION_ID")
    private String personalID;

    @Column(name="FIRST_NAME") 
    private String firstName;

    @Column(name="LAST_NAME")
    private String lastName;

    @Column(name="EMAIL")
    private String email;

    //setters and getters
}

答案 2 :(得分:0)

请查看本文JPA primary keys,尤其是“复合主键”和“嵌入式主键”段落。我认为,当您需要定义类时,您的情况是“嵌入式主键”,它将包含您实际需要的所有主键部分。