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
字段 id
和 property1
.
在第二个 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
我有这个简单的 User
实体:
@Entity
@Table(name = "fdei_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String login;
}
我想创建第二个 table UserDetail
字段 id
和 property1
.
在第二个 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