Home > Java > javaTutorial > JoinColumn vs. MappedBy: How to Choose the Right JPA Annotation for Entity Relationships?

JoinColumn vs. MappedBy: How to Choose the Right JPA Annotation for Entity Relationships?

DDD
Release: 2024-12-18 05:34:20
Original
970 people have browsed it

JoinColumn vs. MappedBy: How to Choose the Right JPA Annotation for Entity Relationships?

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")
Copy after login

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"
Copy after login

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;
}
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template