我有这个简单的User
实体:
@Entity
@Table(name = "fdei_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String login;
}
我想创建第二个表 UserDetail
,其中包含字段 id
和 property1
。
在第二个表UserDetail
中,我不想要生成的递增ID,但我希望字段id
是相同的id
表 User
中用户的信息,我希望当我获取 UserDetail id=1 时,也会获取 id=1 的 User 实体。
@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
的使用,以确保详细信息表中只有一个关键字段。
我添加了这个答案,因为评论中发布的所有来源都没有引用@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
}
关于hibernate - JPA/hibernate : create a primary key which is a primary key of another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48746127/