user3590506
user3590506

Reputation: 171

how to set unidirectional one-to-one relationship using hibernate annotation on a non-primary key?

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

Answers (1)

Vlad Mihalcea
Vlad Mihalcea

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

Related Questions