hibernate 5,外键为主键,单向一对一

时间:2017-10-03 16:17:07

标签: java hibernate

我有两个实体:

第一个实体:

@Entity
@Table(name = "first")
public class First {

    @Id
    private Long id;

    // other properties
    // getters & setters

}

第二实体:

@Entity
@Table(name = "second")
public class Second {

    @OneToOne
    @JoinColumn(name = "first_id")
    private First first;

    // other properties
    // getters & setters

}

我想在第二个实体中创建第一个字段将是主键。

First first = new First()
repository.save(first);

(first.id = 1)必须

Second second = new Second()
second.setFirst(first); // as primary key
repository.save(second);

(second.first = first)必须是

1 个答案:

答案 0 :(得分:0)

使用@MapsId并将@Id字段添加到第二个实体:

@Entity
@Table(name = "second")
public class Second {

    @Id
    private Long Id;

    @MapsId
    @OneToOne
    @JoinColumn(name = "first_id")
    private First first;

    // other properties
    // getters & setters

}

请参阅JPA 2 spec的第37页:

  

情况(b):从属实体具有与该关系相对应的单个主键属性   属性。主键属性与父实体的主键具有相同的基本类型。的   应用于关系属性的MapsId批注指示主键已由   关系属性。

@Entity
public class MedicalHistory {
   @Id String id; // overriding not allowed
   ...
   // default join column name is overridden
   @MapsId
   @JoinColumn(name="FK")
   @OneToOne Person patient;
   ...
}