Перейти к основному содержимому

Объяснение аннотации @JoinColumn

· 2 мин. чтения

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 , в котором хранится значение идентификатора и внешний ключ для сущности Сотрудник .

./3e6cc3e3ee96122e4df167ec9a704d87.png

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 :

./b84cd0f48cd3eec0ba7d388251e03a21.png

5. Вывод

В этой статье мы узнали, как использовать аннотацию @JoinColumn . Мы рассмотрели, как создать как единую ассоциацию сущностей, так и коллекцию элементов.

Как всегда, весь исходный код доступен на GitHub .