
Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:
Once the early-adopter seats are all used, the price will go up and stay at $33/year.
Last updated: May 11, 2024
The annotation jakarta.persistence.JoinColumn marks a column as a join column for an entity association or an element collection.
In this quick tutorial, we’ll show some examples of basic @JoinColumn usage.
The @JoinColumn annotation combined with a @OneToOne mapping indicates that a given column in the owner entity refers to a primary key in the reference entity:
@Entity
public class Office {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "addressId")
private Address address;
}
The above code example will create a foreign key linking the Office entity with the primary key from the Address entity. The name of the foreign key column in the Office entity is specified by name property.
When using a @OneToMany mapping, we can use the mappedBy parameter to indicate that the given column is owned by another entity:
@Entity
public class Employee {
@Id
private Long id;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "employee")
private List<Email> emails;
}
@Entity
public class Email {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee_id")
private Employee employee;
}
In the above example, Email (the owner entity) has a join column employee_id that stores the id value and has a foreign key to the Employee entity.
In situations when we want to create multiple join columns, we can use the @JoinColumns annotation:
@Entity
public class Office {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name="ADDR_ID", referencedColumnName="ID"),
@JoinColumn(name="ADDR_ZIP", referencedColumnName="ZIP")
})
private Address address;
}
The above example will create two foreign keys pointing to ID and ZIP columns in the Address entity:
In this article, we learned how to use the @JoinColumn annotation. We looked at how to create both a single-entity association and an element collection.