Início > Desenvolvimento de software, Java > JPA: @OneToMany Bidirecional com @JoinColumn

JPA: @OneToMany Bidirecional com @JoinColumn

Considerando as entidades Pessoa e Contato, e o relacionamento @OneToMany com navegabilidade bidirecional em que Pessoa contém a lista de 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;

   //...
}

E que cada contato referencia a pessoa vinculada.

@Entity
public class Contato implements Serializable {

   @Id
   @GeneratedValue
   private Long id;

   @Column
   private String label;

   @Column
   private String valor;

   @ManyToOne
   private Pessoa pessoa;

   //...
}

A anotação @ManyToOne também necessita da coluna pessoa_id na tabela Contato, considerando o padrão do nome de coluna, gerado a partir de: <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.

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

Anúncios
  1. Marcos Petry
    16 de outubro de 2014 às 19:57

    Obrigado por compartilhar seu conhecimento. Saúde!
    Abraco

  1. No trackbacks yet.

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s