Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA: which side should be the owning side in a m:n relationship?

Say, for example, I had two entities: Article and Tag (like in a typical blog). Each article can have many tags, and each tag can be used by many articles, so it is a classical m:n relationship.

I need to specify an owning side with JPA. But which side should be the owning side? An article doesn't depend on a certain tag and vice versa. Is there a rule of thumb for determining which side should be the owning side?

like image 591
deamon Avatar asked Aug 14 '10 17:08

deamon


3 Answers

Every bidirectional relationship requires an owning side in JPA. In the particular case of ManyToMany:

  • @JoinTable is specified on the owning side of the relationship.
    • the owning side is arbitrary, you can pick any of the two entities to be the owner.

From the JPA specification:

9.1.26 ManyToMany Annotation

Every many-to-many association has two sides, the owning side and the non-owning, or inverse, side. The join table is specified on the owning side. If the association is bidirectional, either side may be designated as the owning side.

like image 73
Pascal Thivent Avatar answered Nov 13 '22 05:11

Pascal Thivent


You choose the owning side by considering where you want the association be updated. You can update de ManyToMany association in only one place( the owning side). So the choice depend on how you want to manage/update your association fields.

like image 31
cdiesse Avatar answered Nov 13 '22 04:11

cdiesse


my point of view:

it depends on your business. which entity is more important in your business.

in your example, i think Article should be owning side,

like image 35
mhshams Avatar answered Nov 13 '22 03:11

mhshams