我设置了一个单向的一对一映射表。这是我的实现的简化版本。
// part of parent table called "Person"
@Id
@Column(name="id")
private String id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="id", referencedColumnName = "person_id")
private PersonDetails details;
然后...
// part of child table called "PersonDetails"
@Id
@Column(name="id")
private String Id;
@Column(name="person_id")
private String personId;
这似乎不起作用,因为 hibernate sql 日志显示 hibernate 正在尝试在“Person.Id=PersonDetails.Id”上对 Person 和 PersonDetails 进行联接,而我真正想要的是“Person.Id=PersonDetails.personId” ”。
我怎样才能实现这个目标?
最佳答案
我认为您应该将拥有方移至 PersonDetails 中,并将反面使用至 Person 中。这意味着使用双向关联,但我已经在之前的一个项目中成功使用了这种模式:
人:
// part of parent table called "Person"
@Id
@Column(name="id")
private String id;
@OneToOne(mappedBy="person", cascade = CascadeType.ALL)
private PersonDetails details;
人员详细信息:
@Id
@Column(name="id")
private String Id;
@OneToOne
@JoinColumn(name="person_id")
private Person person;
关于java - 如何在非主键上使用 hibernate 注释设置单向一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872852/