ObjDetails
关系Obj
中的一个实体OneToOne
是可选的。
我没有看到在ObjDetails
中使用代理主键的好处,就像在官方文档和大量教程中推荐的那样:
@Entity
public class ObjDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne
private Obj obj;
}
关系是这样的,没有ObjDetails
就不可能有Obj
。
可以Obj
将ObjDetails
用作主键吗?表达这个的语法是什么?
@Entity
public class ObjDetails {
@Id
@OneToOne
private Obj obj;
}
我们可以避免在Obj
中声明ObjDetails
的对象类型,但要表示Long id
中的ObjDetails
与Obj
中的@Entity
public class ObjDetails {
@Id
@OneToOne
private Long id;
}
相同吗?
ntpd
答案 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指向文档。