Dae Marques.
Aqui usamos da seguinte forma, que considero uma boa prática:
- uma classe para a entidade;
- uma classe para ligação entre interface e negócio;
- uma classe para gerenciamento (managed bean).
As entidades nunca são usadas nos MBeans. Nos MBeans são instanciadas apenas essas classes de ligação (chamamos de VO ou TO - de View Object e Transfer Object, respectivamente. Apesar de nomes diferentes, funcionam da mesma forma).
Por que fazemos isso? Simplesmente pra não misturar dados negociais, que são persistidos no banco de dados, com dados que são exibidos na tela, para o usuário. Dei esse exemplo num outro tópico: se você precisa cuidar de dados apenas na tela, como checkbox de exclusão, você precisa manter em algum lugar. Manter na entidade não tem sentido, já que isso não é persistido. Se você não tiver o VO ali no meio, terá que criar na entidade, misturando o que salva no banco de dados e o que aparece na tela, ou ainda colocando uma lista (nesse caso) de Booleans apenas pra controlar a lista de registros a ser excluído, enfim, dores de cabeça.
Pra usar é simples. O VO tem todos os dados da entidade que serão efetivamente usados na tela. Na entidade existe dois métodos, entity2VO e vo2Entity, que copia os dados da entidade para o VO, no primeiro caso, e do VO pra entidade, no segundo. O primeiro é realizado após uma consulta no banco (você recebe a entidade), transformando-o no VO. O segundo acontece quando você vai persistir os dados (precisa ser uma entidade pra ser persistido pelo hibernate). Nos VOs você também pode criar métodos pra configurar uma data num formato específico, por exemplo, coisa desnecessária de ficar na entidade.
Já no seu MBean, você seta apenas os VOs, nunca entidades. Acessa-os normalmente no jsp.
#{nome_do_bean.nome_objeto_VO.atributo
Lembrando que precisa de getter e setter tanto do VO no seu MBean quanto dos atributos dentro do VO.
Quanto à nomenclatura, usamos como padrão o seguinte:
- para Management Beans: MBean[Nome]. e.g.: MBeanConsultaPlacasDiscosVoadores, MBeanCadastroEspinhas
- para entidades: [Nome]. e.g.: PlacasDiscosVoadores, Espinhas
- para VOs: [Nome_da_Entidade]VO. e.g.: PlacasDiscosVoadoresVO, EspinhasVO
Entendeu?
Abraço