Hibernate JPA映射中的问题

时间:2014-01-12 11:20:32

标签: java hibernate jpa-2.0 hibernate-mapping

我有一个数据模型,其中包含:

  • 一个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。

2 个答案:

答案 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关系。但请确保您的数据库表UserDetailsUser表具有外键关系。使用以下代码,使用JPAHibernate来实现它。

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