Inicial > Desenvolvimento de software, Java > JPA: @OneToMany Unidirecional com @JoinColumn

JPA: @OneToMany Unidirecional com @JoinColumn

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
   @JoinColumn(name="pessoa_id")
   private List<Contato> contatos;

   //...
}

 Ao utilizamos as anotações @OneToMany e @JoinColumn, o relacionamento ocorrerá com a adição da coluna e chave estrangeira pessoa_id a tabela Contato.

@Entity
public class Contato implements Serializable {

   @Id
   @GeneratedValue
   private Long id;

   @Column
   private String label;

   @Column
   private String valor;

   //...
}

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;

 

 

Veja no próximo artigo como fazer o relacionamento @OneToMany bidirecional.

 

 



Reinaldo Gil Lima de Carvalho

Publicidade
  1. 5 de outubro de 2017 às 14:03

    E como seria montado o CRITERIA para eu buscar apenas os contatos da pessoa X?

    • 5 de outubro de 2017 às 14:15

      Ao carregar a pessoa X, seja a partir de seu id pelo entityManager.find(Pessoa.class, id), os contatos já estarão em List contatos. Esse artigo mostra apenas a relação entre as anotações e as tabelas criadas, não aborda o entityManager ou CriteriaQuery.

  1. No trackbacks yet.

Deixe um comentário

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

Logo do WordPress.com

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

Foto do Facebook

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

Conectando a %s

%d blogueiros gostam disto: