Anotação @JoinColumn Explained

Anotação @JoinColumn Explained

1. Introdução

A anotaçãojavax.persistence.JoinColumn marca uma coluna como uma coluna de junção para uma associação de entidade ou coleção de elementos.

Neste tutorial rápido, mostraremos alguns exemplos de uso básico de@JoinCloumn.

2. @OneToOne Exemplo de mapeamento

A anotação@JoinColumn combinada com um mapeamento@OneToOne indica que uma determinada coluna na entidade proprietária se refere a uma chave primária na entidade de referência:

@Entity
public class Office {
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "addressId")
    private Address address;
}

O exemplo de código acima criará uma chave estrangeira ligando a entidadeOffice com a chave primária da entidadeAddress. O nome da coluna de chave estrangeira na entidadeOffice é especificado pela propriedadename.

3. @OneToMany Exemplo de mapeamento

Ao usar um mapeamento@OneToMany, podemos usar o parâmetromappedBy para indicar que a coluna fornecida é propriedade de outra entidade.

@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;
}

No exemplo acima,Email (a entidade proprietária) tem uma coluna de junçãoemployee_id que armazena o valor de id e tem uma chave estrangeira para a entidadeEmployee.

image

4. @JoinColumns

Em situações em que queremos criar várias colunas de junção, podemos usar a anotação@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;
}

O exemplo acima criará duas chaves estrangeiras apontando para as colunasIDeZIP na entidadeAddress:

image

5. Conclusão

Neste artigo, aprendemos como usar a anotação@JoinColumn. Mostramos exemplos de como criar associações de entidade única e coleção de elementos.

Como sempre, todo o código-fonte está disponívelover on GitHub.