Início > Desenvolvimento de software, Java > JPA: @OneToMany Unidirecional

JPA: @OneToMany Unidirecional

Considerando as entidades Pessoa e Contato, e o relacionamento @OneToMany com navegabilidade unidirecional em que Pessoa contém a lista de Contatos:

@Entity
public class Pessoa implements Serializable {

   @Id
   @GeneratedValue
   private Long id;

   @Column
   private String nome;

   @OneToMany
   private List<Contato> contatos;

   // (...)
}

Ao utilizar a anotação @OneToMany estará implícito o uso da anotação @JoinTable(name=”Pessoa_Contato”). Para definir o nome da tabela intermediária diferente do padrão, pode-se declarar a anotação @JoinTable informando o nome da tabela por meio do atributo “name”.

@Entity
public class Contato implements Serializable {

   @Id
   @GeneratedValue
   private Long id;

   @Column
   private String label;

   @Column
   private String valor;

   // (...)
}

A partir das entidades descritas acima, obteremos o seguinte DDL:

CREATE TABLE `Pessoa` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `nome` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `Contato` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `label` varchar(255) DEFAULT NULL,
 `valor` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `Pessoa_Contato` (
 `Pessoa_id` bigint(20) NOT NULL,
 `contatos_id` bigint(20) NOT NULL,
 PRIMARY KEY (`Pessoa_id`,`contatos_id`),
 UNIQUE KEY `contatos_id` (`contatos_id`),
 KEY `FK48CFA992C83C87F8` (`contatos_id`),
 KEY `FK48CFA992724ED87D` (`Pessoa_id`),
 CONSTRAINT `FK48CFA992724ED87D` FOREIGN KEY (`Pessoa_id`)
     REFERENCES `Pessoa` (`id`),
 CONSTRAINT `FK48CFA992C83C87F8` FOREIGN KEY (`contatos_id`)
     REFERENCES `Contato` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Veja no próximo artigo como fazer o relacionamento @OneToMany sem a criação de uma tabela intermediária.



Reinaldo Gil Lima de Carvalho

Anúncios
  1. Nenhum comentário ainda.
  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