[英]Issue in Mapping for Hibernate JPA
我有一个数据模型,它具有:
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;
...
}
上面的映射为获取特定User
UserDetails
带来了问题。
它要求两个实体共享相同的主键USER_ID。
您没有提到上述映射的问题。 看起来不错,但是我将对UserDetails
表使用单独的主键。
@Entity
class UserDetails{
@Id
private int id;
@OneToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "USER_ID")
private User user;
...
}
另外,使用双向关系进行导航是一种很好的做法,以便于导航,即从User
获取用户详细信息,您只需使用user.getUserDetails();
因此在User
类中:
@Entity
class User{
@Id
@Column(name="USER_ID")
private int id;
@OneToOne(mappedBy = "user")
private UserDetails userDetails;
}
在这种情况下,请使用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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.