Ola PessoAll!Dando continuidade a tematica de Persistencia de dados, demonstrarei neste post, a implementacao do relacionamento de cardinalidade 1:N (1 para N), o que implica o uso das annotations: @ManyToOne e @OneToMany.Como ja visto em posts anteriores, o uso de frameworks ORM agregam bastante facilidade e agilidade no desenvolvimento de aplicacoes; sabe-se que modelagens de dados propiciam a coexistencia de sua estrutura, ou seja, priorizam (na maioria das vezes) o uso de relacionamentos, ou seja, objetos de banco nao tem muita significancia quando isolados.Para a obtencao de informacoes coesas, bem como, significantes ao contexto de negocio, o uso de relacionamentos e imprescindivel, desta forma, saber manipular os relacionamentos no contexto ORM e significativamente importante.Segundo a documentacao da especificacao JEE 6 (http://docs.oracle.com/javaee/6/tutorial/doc/bnbqa.html#bnbqh), tem-se:One-to-many: An entity instance can be related to multiple instances of the other entities. A sales order, for example, can have multiple line items. In the order application, Order would have a one-to-many relationship with LineItem. One-to-many relationships use the javax.persistence.OneToMany annotation on the corresponding persistent property or field.Many-to-one: Multiple instances of an entity can be related to a single instance of the other entity. This multiplicity is the opposite of a one-to-many relationship. In the example just mentioned, the relationship to Order from the perspective ofLineItem is many-to-one. Many-to-one relationships use the javax.persistence.ManyToOne annotation on the corresponding persistent property or field.Sera utilizado o projeto Persistencia constituidos nos posts anteriores para a implementacao. Ao trabalho!A MODELAGEMNo nosso banco de dados que abrigava o cadastro de produtos, criaremos a tabela Categoria e o devido relacionamento com produto, conforme modelagem:O script para a criacao da tabela Categoria e inclusao do relacionamento em Produto, segue:create table categoria (id_categoria serial,nome varchar(45) not null,descricao varchar(200),fg_ativo boolean,primary key (id_categoria));alter table produtoadd column id_categoria integer;alter table produtoadd constraint categoria_id_categoria_fk foreign key (id_categoria) references categoria (id_categoria);IMPLEMENTACAOFeitas as alteracoes procederemos ao mapeamento, que devera ser constituido da seguinte forma:Produto:package br.com.serjava.persistencia.entity;//imports omitidos@Entity@Table(name="produto")@SequenceGenerator(name="produto_id_produto_seq", sequenceName="produto_id_produto_seq", allocationSize=1)public class Produto implements Serializable { private static final long serialVersionUID = -8121617132071401241L; @Id @GeneratedValue(generator="produto_id_produto_seq", strategy=GenerationType.SEQUENCE) @Column(name="id_produto") private Integer idProduto; @Column(name="nm_produto") private String nomeProduto; @Column(name="quantidade") private Integer quantidade; @Column(name="valor") private Double valor;//relacionamento com categoria @ManyToOne @JoinColumn(name="id_categoria", referencedColumnName="id_categoria") private Categoria category;//getters and settersCategoria:package br.com.serjava.persistencia.entity;//imports omitidos@Entity@Table(name="categoria")@SequenceGenerator(name="categoria_id_categoria_seq", sequenceName="categoria_id_categoria_seq", allocationSize=1)public class Categoria implements Serializable { private static final long serialVersionUID = -8765631845563878481L; @Id @GeneratedValue(generator="categoria_id_categoria_seq", strategy=GenerationType.SEQUENCE) @Column(name="id_categoria") private Long idCategoria; @Column(name="nome", nullable=false) private String nome; @Column(name="descricao") private String descricao; @Column(name="fg_ativo") private Boolean ativo; @OneToMany(mappedBy="categoria") private List<Produto> listaProdutos;//getters and settersObserve que na entidade Produto temos um objeto de Categoria, pois, de acordo com o modelo elaborado, um produto tem uma categoria; ja na entidade Categoria, note a existencia de uma lista de Produtos, o que indica que uma categoria pode estar associada a N produtos.Atencao! O atributo mappedBy presente na annotation @OneToMany, presente na entidade Categoria, deve conter a nomenclatura dada ao objeto que referencia-se a uma categoria na entidade Produto!Na entidade Produto, temos a anotacao @JoinColumn (voce deve estar pensando: Nossa e aqui que o join e feito? SIM!), seus atributos name e referencedColumnName significam, respectivamente, o nome do atributo correspondente a foreign key de categoria na tabela produto (no banco de dados)