Reputation: 208944
I'm trying to get a firm grasp on the concept of Owning-side. Couldn't really get a clear picture from any question i found here. Basically I'm going through the Java EE JPA tutorial. They have the following database schema, where PLAYER
and TEAM
have a many-to-many relationship
Also stated
- A player can be on many teams.
- A team can have many players.
- There is a many-to-many relationship between
PLAYER
andTEAM
.
Pretty straight forward so far. But when is gets to the coding part, they make the TEAM
the owning side of the relationship.
public class Team {
private Collection<Player> players;
@ManyToMany
@JoinTable(
name = "PERSITENCE_ROSTER_TEAM_PLAYER",
joinColumns = @JoinColumn(name = "TEAM_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "PLAYER_ID", referencedColumnName = "ID")
)
public Collection<Player> getPlayers() {
return players;
}
}
public class Player {
private Collection<Team> teams;
@ManyToMany(mappedBy = "players")
public Collection<Team> getTeams() {
return teams;
}
}
I have no problem understanding the code. What I can't get a handle on is:
1. How is it determined that
TEAM
is the owning side?2. Would it make any difference if
PLAYER
was made the owning side instead, in this scenario?
Also stated from the tutorial.
"The entity that specifies the
@JoinTable
is the owner of the relationship, so theTEAM
entity is the owner of the relationship with thePLAYER
entity."
That being said:
3. Would the above statement make my second question true? Meaning that there is no determining factor besides which one you decide to make the owning side, with the
@JoinTable
annotation?
Upvotes: 22
Views: 10490
Reputation: 19533
- How is it determined that TEAM is the owning side?
In the case of ManytoMany relationships in bidirectional scenario the Owner of the relationship can be selected arbitrarily, but having in mind the purpose you should select the entity that makes more sense to retrieve first or the one that is more used according to your purpose. You only need to remember that Many always need to be the owning side in ManyToOne scenarios.
- Would it make any difference if PLAYER was made the owning side instead, in this scenario?
No, it wouldn´t as the relationship is bidirectional.
- Would the above statement make my second question true? Meaning that there is no determining factor besides which one you decide to make the owning side, with the @JoinTable annotation?
Yes, @JoinTable must to be in the owner in the relationship as some other annotations. Once you select the owner you should add the annotation in that class.
Consider also the Cascade operation you need to have if apply, and if there are need to be in both side of the relationship.
Upvotes: 20
Reputation: 6738
According to your question, you use ManyToMany relationship bidirectional.Here is my answer,
For question 1
For question 2
For question 3
Upvotes: 1
Reputation: 103
AFAIK you get to determine the owning side. There is nothing wrong in choosing any particular side in a m:n scenario.
So, to answer your questions:
- How is it determined that TEAM is the owning side?
Arbitrarily I think.
2 . Would it make any difference if PLAYER was made the owning side instead, in this scenario?
There will not be any difference
3 . Would the above statement make my second question true? Meaning that there is no determining factor besides which one you decide to make the owning side, with the @JoinTable annotation?
Yes
Upvotes: 3