Olá, em meu projeto tenho uma classe Funcionario, que é composta por diversas classes que por sua vez são compostas ou agregadas por outras classes.
Em um case de meu sistema o USUÁRIO pode ter mais de um registro e ser mais de um FUNCIONARIO, então tenho um combo que lista qual o resgistro ele vai utilizar. Mas para montar este combo eu instancio um objeto Funcionario, insiro-o num List<FuncionarioBean> e utilizo somente o atributo registro(que pego do banco de dados).Depois que ele seleciona o FUNCIONARIO(registro) que vai utilizar, refaço a pesquisa obtendo(novamente do banco de dados) todos os dados daquele FUNCIONARIO(registro).
Acho que essa não é a forma mais eficaz de se fazer isso(Instanciar uma classe grande e so utilizar 1 atributo).
Será que faço uma classe, com menos atributos, só para Listar os registros do Funcionario?
Se vc é obrigado a ler um objeto Funcionario para montar o combo, pq vc não o mantém na memória até a seleção? Pq ao invés de ir ao banco selecionar a mesma coisa, vc retorna a apenas o funcionário na posição da seleção que foi feita no combo sem a necessidade de busca.
Não sei se entendi bem seu problema nem estou vendo seu código (fica mais complexo assim) mas creio que seja por aí.
Agora se você quer na verdade ter mais performance, aí é melhor dividir as coisas. O que vc deve mensurar é até que ponto a performance é mais importante que a utilização de uma classe única.
Acho que vc esta correto sim a melhor coisa é trabalhar com os objetos de persistencia ou pojos como achar melhor, se for via web passe sempre pelo request pois quanto menos usar session melhor !
o Método find() do DAO retornaria uma lista de funcionários, mas sem seus relacionamentos (Endereço, cargo, etc).
e o Método selectByPk() do DAO retornaria um FuncionarioBean totalmente populado.
Particularmente não gosto de criar beans específicos para uma tela, acho muito melhor manter um bean por entidade do sistema, como você fez no modelo. Porém tem casos onde o desempenho é crítico.
Acho que você poderia dar uma olhada no lazy-load do hibernate. Não sei qual framework, isso se você está usando algum framework, você está usando na camada de persiência mas acho que daria uma boa idéia de como ter menos objetos em memória.
A idéia geral é isso que o hover falou. Mas de fato todas as buscas retornariam somente o bean referente ao DAO, e quando você chama algum método que resgata uma agregação ela é populada. Seria algo como você só tem em memória, o que você está usando ou usou em algum momento do processamento da requisição.