1. Обзор
Аннотация javax.persistence.JoinColumn
помечает столбец как столбец соединения для ассоциации сущностей или коллекции элементов.
В этом кратком руководстве мы покажем несколько примеров базового использования @JoinColumn
.
2. Пример сопоставления @OneToOne
Аннотация @JoinColumn
в сочетании с сопоставлением @OneToOne
указывает, что данный столбец в объекте-владельце ссылается на первичный ключ в ссылочном объекте:
@Entity
public class Office {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "addressId")
private Address address;
}
В приведенном выше примере кода создается внешний ключ, связывающий сущность Office
с первичным ключом из сущности Address .
Имя столбца внешнего ключа в объекте Office
задается свойством name .
3. Пример сопоставления @OneToMany
При использовании сопоставления @OneToMany
мы можем использовать параметр mappedBy
, чтобы указать, что данный столбец принадлежит другому объекту:
@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;
}
В приведенном выше примере электронная почта
(сущность-владелец) имеет столбец соединения employee_id
, в котором хранится значение идентификатора и внешний ключ для сущности Сотрудник .
4. @JoinColumns
В ситуациях, когда мы хотим создать несколько столбцов соединения, мы можем использовать аннотацию @JoinColumns
:
@Entity
public class Office {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name="ADDR_ID", referencedColumnName="ID"),
@JoinColumn(name="ADDR_ZIP", referencedColumnName="ZIP")
})
private Address address;
}
В приведенном выше примере будут созданы два внешних ключа, указывающих на столбцы ID
и ZIP
в объекте Address :
5. Вывод
В этой статье мы узнали, как использовать аннотацию @JoinColumn
. Мы рассмотрели, как создать как единую ассоциацию сущностей, так и коллекцию элементов.
Как всегда, весь исходный код доступен на GitHub .