我已经设置了单向一对一映射表。这是我的实现的简化版本。
// 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 ”
我怎样才能实现这一目标?
答案 0 :(得分:2)
我认为你应该把拥有的一面移到PersonDetails中并在Person中使用反面。这意味着使用双向关联,但我在之前的一个项目中成功使用了这种模式:
人:
// part of parent table called "Person"
@Id
@Column(name="id")
private String id;
@OneToOne(mappedBy="person", cascade = CascadeType.ALL)
private PersonDetails details;
PersonDetails:
@Id
@Column(name="id")
private String Id;
@OneToOne
@JoinColumn(name="person_id")
private Person person;