JPA: @OneToMany Unidirecional com @JoinTable
Neste exemplo de relacionamento @OneToMany com navegabilidade unidirecional, a entidade Pessoa contém uma lista da entidade Contato:
@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
Categorias:Desenvolvimento de software, Java
@Entity, @OneToMany, JPA
Comentários (0)
Trackbacks (0)
Deixe um comentário
Trackback