Olá desenvolvedores, neste tutorial promoveremos algumas alterações na camada de modelo (model) fazendo com que ela aceite o cadastro de mais de um e-mail. A camada modelo faz parte da arquitetura MVC (Model-View-Controller) ou Modelo, Visão e Controle, que é um padrão de arquitetura de software com o objetivo de separar a apresentação da informação da interação do usuário com ela.

Neste tutorial a ideia é criar um modal para o cadastro de e-mails. Tal como acontece com o cadastro de telefones. Assim o acesso ao modal para efetuar o cadastro de e-mails será por meio da tabela de exibição de dados.

REMOVENDO E ADICIONANDO CAMPOS

Desse modo, na página primefaces.xhtml o primeiro passo é a remoção do campo de cadastro de e-mail do formulário de cadastro. Da mesma forma, na camada de modelo remova o atributo e-mail e os respectivos métodos Getters and Setters. Remova também qualquer referência a este atributo no toString.

Como utilizamos a mesma camada de modelo tanto para a tela em JSF como para a tela com o PrimeFaces, na página index.xhtml remova também o campo de entrada referente ao e-mail. Assim, em consequência a classe TesteHibernate apresentará erros, remova qualquer referência ao e-mail também dessa classe. O próximo passo é remover a coluna e-mail na base de dados.

Após ter removido todas as referências ao e-mail, como medida de segurança limpe o cache do projeto. Se você utiliza a IDE Eclipse, no menu clique em Project >> Clean, selecione o projeto e clique em OK. Inicie o projeto para verificar se não há erros após as alterações.

CAMADA DE MODELO PARA E-MAILS

Criaremos no package model uma nova camada de modelo que representará um relacionamento do tipo [1:N], isto é, de um para muitos. Visto que uma pessoa pode ter mais de um e-mail, e vários e-mails podem pertencer a uma única pessoa.

A classe EmailUser representa uma nova Entidade que por sua vez representa os dados na base de dados, e por isso deverá ser anotada como @Entity.

A classe implementará o id, o atributo e-mail e o objeto pessoa anotado com o @ManyToOne, que significa que mais de um telefone poderá ser atribuído a uma única pessoa. O atributo fetch determina que os e-mails serão carregados automaticamente do banco de dados assim que a aplicação for iniciada. Gere os métodos Getters and Setters para todos e eles. Para o id gere também o hashCode() and equals(), para diferenciar os objetos uns dos outros.

Esta nova classe se tornará uma tabela no banco de dados, assim será preciso declará-la no arquivo de persistência, persistence.xml.

<class>model.EmailUser</class>

MAPEAMENTO

Na classe UsuarioPessoa mapeie o relacionamento onde uma pessoa poderá está vinculada a mais de um endereço de e-mail. No entanto, para que o Hibernate não apresente erros quando a aplicação for iniciada, o carregamento não poderá ser automático. Assim o valor do atributo fetch será FetchType.LAZY. Desse modo, ele somente será carregado quando em algum lugar do sistema o getEmails for chamado. Gere os métodos Getters and Setters. E sempre inicie a lista para evitar um erro de NullPointerException.

EM POUCAS PALAVRAS

Neste tutorial implementamos mais uma camada de modelo em nossa aplicação possibilitando o cadastro de mais de um e-mail para o mesmo usuário.