如何在非主键上使用hibernate注释设置单向一对一关系?

时间:2014-07-21 19:11:54

标签: java mysql hibernate jpa join

我已经设置了单向一对一映射表。这是我的实现的简化版本。

// 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 ”

我怎样才能实现这一目标?

1 个答案:

答案 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;