我有一个数据模型,其中包含:
User
实体,其中包含一些特定于应用程序中2个用户的字段UserDetails
,除User
实体两个实体共享相同的主键。我是JPA的新手。两者之间应该有什么样的映射?
@Entity
class User{
@Id
@Column(name="USER_ID")
private int id;
}
@Entity
class UserDetails{
@Id
@OneToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "USER_ID")
private User user;
...
}
上述映射提供了为特定UserDetails
提取User
的问题。
要求两个实体共享相同的主键USER_ID。
答案 0 :(得分:1)
您没有提及上述映射的问题。它看起来不错,但我会为UserDetails
表使用单独的主键。
@Entity
class UserDetails{
@Id
private int id;
@OneToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "USER_ID")
private User user;
...
}
此外,最好使用bidirectional relationships进行eaiser导航,即从User
获取用户详细信息,您只需在user.getUserDetails();
类中使用User
:
@Entity
class User{
@Id
@Column(name="USER_ID")
private int id;
@OneToOne(mappedBy = "user")
private UserDetails userDetails;
}
答案 1 :(得分:0)
在这种情况下使用OneToOne
关系。但请确保您的数据库表UserDetails
与User
表具有外键关系。使用以下代码,使用JPA
和Hibernate
来实现它。
@Entity
class User{
@Id
@Column(name="USER_ID")
private int id;
// getters and setters
}
@Entity
class UserDetails{
@Id
@Column(name="USER_DETAILS_ID")
private int userDetailsId;
@OneToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
private User user;
// getters and setters
}