Reputation: 171
i have set an unidirectional one-to-one mapping tables. here is my simplified version of its implementation.
// 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;
and then...
// part of child table called "PersonDetails"
@Id
@Column(name="id")
private String Id;
@Column(name="person_id")
private String personId;
this does not seem to work because hibernate sql log shows that hibernate is trying to do a join on Person and PersonDetails on " Person.Id=PersonDetails.Id" when what i really want is "Person.Id=PersonDetails.personId".
how can i achieve this?
Upvotes: 0
Views: 3649
Reputation: 153780
I think you should move the owning side into PersonDetails and use an inverse side into Person. This will imply using a bidirectional association but I've been successfully using this pattern in one of my previous projects:
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;
Upvotes: 2