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

Объясненная аннотация @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.

image

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:

image

5. Заключение

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

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