Объясненная аннотация @JoinColumn
1. Вступление
Аннотацияjavax.persistence.JoinColumn отмечает столбец как столбец соединения для ассоциации сущностей или коллекции элементов.
В этом кратком руководстве мы покажем несколько примеров базового использования@JoinCloumn.
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 emails;
}
@Entity
public class Email {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee_id")
private Employee employee;
}
В приведенном выше примереEmail (объект-владелец) имеет столбец соединенияemployee_id, в котором хранится значение идентификатора и внешний ключ для объектаEmployee.
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. Мы показали примеры, как создать как единую ассоциацию объекта, так и коллекцию элементов.
Как всегда доступен весь исходный кодover on GitHub.