要使用共享主键映射一对一关联,请使用
@PrimaryKeyJoinColumn和
@MapsId注释。
Hibernate参考文档的相关部分:
PrimaryKeyJoinColumn
PrimaryKeyJoinColumn注释确实表示该实体的主键用作关联实体的外键值。
MapsId
MapsId注释要求Hibernate从另一个关联的实体复制标识符。在Hibernate行话中,它被称为外来生成器,但JPA映射读起来更好,值得鼓励
人.java
@Entitypublic class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "person_id") private Long id; @oneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn private VitalStats vitalStats; }VitalStats.java
@Entitypublic class VitalStats { @Id @Column(name="vitalstats_id") Long id; @MapsId @oneToOne(mappedBy = "vitalStats") @JoinColumn(name = "vitalstats_id") //same name as id @Column private Person person; private String stats;}人员数据库表
CREATE TABLE person ( person_id bigint(20) NOT NULL auto_increment, name varchar(255) default NULL, PRIMARY KEY (`person_id`))
VitalStats数据库表
CREATE TABLE vitalstats ( vitalstats_id bigint(20) NOT NULL, stats varchar(255) default NULL, PRIMARY KEY (`vitalstats_id`))



