JPA / Hibernate:创建一个主键,它是另一个 table 的主键

JPA / Hibernate: create a primary key which is a primary key of another table

我有这个简单的 User 实体:

@Entity
@Table(name = "fdei_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String login;
}

我想创建第二个 table UserDetail 字段 idproperty1.

在第二个 table UserDetail 中,我不想要生成递增的 ID,但我希望字段 id 与用户 id 相同在 table User 中,我希望当我获取 UserDetail id=1 时,也获取 id=1 的用户实体。

@Entity
@Table(name = "fdei_user_details")
public class UserDetails {

    @Id
    @OneToOne
    @PrimaryKeyJoinColumn(name="id", referencedColumnName="id")
    private User id;

    private Boolean property1;
}

我怎样才能意识到这一点? 我尝试使用@OneToOne、@PrimaryKeyJoinColumn、@MapsId...但没有...我总是有错误。

正确的方法是什么?

非常感谢, 安德里亚

  • 您要查找的是单向@OneToOne 关系。
  • 您需要 @Id 字段和关系 (User user) 字段。
  • 请注意@MapsId的用法,确保明细中只有一个关键字段table。

我添加了这个答案,因为评论中发布的 none 来源参考了 @MapsId

@Entity
@Table(name = "fdei_user_details")
public class UserDetails {

    @Id
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @MapsId
    @OneToOne
    @JoinColumn(name = "id", referencedColumnName = "id")
    private User user;

    private Boolean property1;

    // getters and setters
}
@Entity
@Table(name = "fdei_user_details")
public class UserDetails {

    @Id
    @MapsId
    @OneToOne
    @JoinColumn(name = "id")
    private User user;

    private Boolean property1;

    // getters and setters
}

您可以在映射本身 (JPA 2.0) 上注释 @Id