Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
604 views
in Technique[技术] by (71.8m points)

java - JPA @JoinColumn annotation with One To One relationship

Is it true that @JoinColumn can be used on both side of One to One relationship in JPA ? I was under impression that it should be always used in owning side of One to One relationship as owning side will have foreign key column and this annotation define the attribute of foreign key column . Please clarify if my understanding is not correct .

Edit #1 - I wanted to know , In which scenario we will be using @JoinColumn annotation on both side of one to one relationship ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The OneToOne relationship is not necessarily bi-directional. A bi-directional OneToOne relationship happens when a reference exists to the other object of the relationship in both the source and the target objects.

In a bi-directional OneToOne relationship, a single foreign key is used in the owning side of the relationship. On the other hand, the target entity must use the mappedBy attribute.

  • Example:

Let's consider a OneToOne relationship between a Player and a Website objects.

Each player entity corresponds to exactly one website entity:

@Entity
public class Player {
  @Id
  @Column(name="PLAYER_ID")
  private long id;
  ...
  @OneToOne
  @JoinColumn(name="WEBSITE_ID")
  private Website website;
  ...
}

If we add the mappedBy option to the Website entity, the OneToOne unidirectional association will be transfornmed into a bidirectional one:

@Entity
public class Website {
  @Id
  @Column(name = "WEBSITE_ID")
  private long id;
  ...
  @OneToOne(mappedBy="website")
  private Player websiteOwner;
  ...
}

You can consult this link and this one for more information.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...