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

时间:2018-02-12 12:05:27

标签: hibernate jpa jpa-2.0 one-to-one

我有这个简单的User实体:

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

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

    private String login;
}

我想创建一个包含字段UserDetailid的第二个表property1

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

User

我怎么能意识到这一点? 我试过@OneToOne,@ PrimaryKeyJoinColumn,@ MatsId ......但没有......我总是有错误。

什么是正确的方式?

非常感谢, 安德烈

2 个答案:

答案 0 :(得分:2)

  • 您正在寻找的是单向@OneToOne关系。
  • 您需要@Id字段和关系(User user)字段。
  • 请注意@MapsId的使用情况,以确保详细信息表中只有一个关键字段。

我添加了这个答案,因为评论中发布的所有消息都没有引用@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
}

答案 1 :(得分:0)

@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