是否可以避免OneToOne关系中的代理主键并将外键重用为id?

时间:2018-01-22 17:45:16

标签: hibernate orm

ObjDetails关系Obj中的一个实体OneToOne是可选的。

我没有看到在ObjDetails中使用代理主键的好处,就像在官方文档和大量教程中推荐的那样:

@Entity
public class ObjDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne
    private Obj obj;
}

关系是这样的,没有ObjDetails就不可能有Obj

可以ObjObjDetails用作主键吗?表达这个的语法是什么?

@Entity
public class ObjDetails {
    @Id
    @OneToOne
    private Obj obj;
}

我们可以避免在Obj中声明ObjDetails的对象类型,但要表示Long id中的ObjDetailsObj中的@Entity public class ObjDetails { @Id @OneToOne private Long id; } 相同吗?

ntpd

1 个答案:

答案 0 :(得分:0)

以下是官方文档中的剥离副本:

@Entity
public static class Person  {
    @Id
    private Long id;
}

@Entity
public static class PersonDetails  {
    @Id
    private Long id;

    @OneToOne
    @MapsId
    private Person person;
}

基本部分是保持原始@Id引用和键入Person引用标记为@OneToOne,最重要的是@MapsId

它被称为派生标识符。感谢JB指向文档。