JPA: @OneToMany Bidirecional com @JoinColumn
Neste exemplo de relacionamento @OneToMany com navegabilidade bidirecional a entidade Pessoa contém uma lista da entidade Contato e cada Contato possui a referência a Pessoa vinculada. A anotação @JoinColumn adiciona a coluna e chave-estrangeira pessoa_id na tabela Contato.
@Entity public class Pessoa implements Serializable { @Id @GeneratedValue private Long id; @Column private String nome; @OneToMany @JoinColumn(name="pessoa_id") private List<Contato> contatos; //... }
A anotação @ManyToOne também utilizará a coluna pessoa_id da tabela Contato, pois segue o padrão do nome de coluna <classe>_id. Assim, a anotação @ManyToOne usará a mesma coluna (pessoa_id) para relacionamento que foi gerado pela anotação @OneToMany da entidade Pessoa.
@Entity public class Contato implements Serializable { @Id @GeneratedValue private Long id; @Column private String label; @Column private String valor; @ManyToOne private Pessoa pessoa; //... }
Obteremos assim o seguinte DDL:
CREATE TABLE `Pessoa` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `nome` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; CREATE TABLE `Contato` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `label` varchar(255) DEFAULT NULL, `valor` varchar(255) DEFAULT NULL, `pessoa_id` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `FK9BEFBE0A724ED87D` (`pessoa_id`), CONSTRAINT `FK9BEFBE0A724ED87D` FOREIGN KEY (`pessoa_id`) REFERENCES `Pessoa` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Reinaldo Gil Lima de Carvalho
Categorias:Desenvolvimento de software, Java
@Entity, @OneToMany, JPA
Obrigado por compartilhar seu conhecimento. Saúde!
Abraco