在我的数据库模型中,我有2个主键。我正在使用JPA和hibernate。
我的数据库模型就像
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概念的新手。我很困惑
由于
答案 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,尤其是“复合主键”和“嵌入式主键”段落。我认为,当您需要定义类时,您的情况是“嵌入式主键”,它将包含您实际需要的所有主键部分。