繁体   English   中英

Hibernate JPA映射中的问题

[英]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关系。 但是,请确保您的数据库表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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM