Java 如何在数据库中映射具有2个主键的JPA实体

Java 如何在数据库中映射具有2个主键的JPA实体,java,hibernate,jpa,Java,Hibernate,Jpa,在我的数据库模型中,我有两个主键。我将JPA与hibernate一起使用 我的数据库模型如下 USR\u信息\u TBL 公司ID 个人身份证 名字 姓氏 电子邮件 USR_信息_TBL_PK 现在我的JPA实体如下所示 @Entity @Table("USR_INFO_TBL") public class UerInfo{ @ID(name ="COMPANY_ID") private String companyID; private String personalID;

在我的数据库模型中,我有两个主键。我将JPA与hibernate一起使用

我的数据库模型如下


USR\u信息\u TBL 公司ID
个人身份证
名字
姓氏
电子邮件
USR_信息_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的概念还不熟悉,所以我浏览了一些帖子。当时我很困惑


谢谢

请查看本文,特别是“复合主键”和“嵌入式主键”段落。我认为,当您需要定义类时,您的案例是“嵌入式主键”,该类将包含您实际需要的所有主键部分。

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

@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;
}

在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个实体pojo类的概念。我只有一个带有字段的pojo类,另一个java实体pojo是什么?你能不能在我的代码上面修改一下,让我弄清楚idea@Meskobalazs..how通过查看上面的数据库模型,我可以知道新的pojo类或实体应该是哪个名称,以及类中应该有哪些字段。没有这方面的信息..名称本身是不相关的,字段是主键的组件我们需要创建一个单独的类并且应该包含两个主键字段吗?我说的对吗?等等!公司ID实际上不是外键?那会更有意义的。谢谢。明白了。还有一件事我想从数据库中检索一条记录。现在,我必须在哪个主键上构建查询。从USER\u INFO\u表c中选择c,其中fromId:PERSONAL\u ID,然后在查询中调用getSingleResult.。对吗?