JDBC: JoinColumn versus MappedBy
In Java Persistence API (JPA), JoinColumn and mappedBy are two annotations used to define relationships between entities. Understanding the distinction between these annotations is essential for efficient data modeling and database interactions.
JoinColumn: Ownership and Foreign Keys
The @JoinColumn annotation indicates that the entity annotated with it is the owner of the relationship. This means that the corresponding table maintains a foreign key column referencing the primary key of the referenced table. For instance, in the sample code provided:
@JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
The Company entity is the owner of the relationship with the Branch entity. The companyIdRef column in the Branch table will serve as the foreign key referencing the companyId column in the Company table.
MappedBy: Inverse Relationships
On the other hand, the @mappedBy annotation signifies that the entity annotated with it is on the inverse side of the relationship. The owner of the relationship resides in the "other" entity, which is referenced by the mappedBy attribute. In this scenario:
@mappedBy = "companyIdRef"
The Branch entity is the inverse of the relationship with the Company entity. The companyIdRef attribute in the Branch entity establishes a bidirectional relationship, allowing for the Company entity to be accessed from the Branch entity.
Correct Annotations for the Sample Code
To achieve a fully bidirectional relationship, the correct annotations for the sample code would be:
@Entity public class Company { @OneToMany(mappedBy = "company", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Branch> branches; } @Entity public class Branch { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "companyId") private Company company; }
By correctly annotating the relationships, you can effectively navigate and manipulate data between related entities in your Java applications.
The above is the detailed content of JoinColumn vs. MappedBy: How to Choose the Right JPA Annotation for Entity Relationships?. For more information, please follow other related articles on the PHP Chinese website!