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.
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:
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.