Aew galera
Estou com uma duvida no JPA, estou desenvolvendo para Desktop, onde duas aplicações acessam o mesmo banco de dados simultaneamente, por isso nao posso utilizar o cache de 1 nivel do Hibernate, e para atualizar os meus selects eu estou dando um clear sempre no inicio dos metodos de select no meu GenericDAO, mas assim gera um problema pois tenho por exemplo um objeto NFiscal com varios relacionamentos que sao populados com LAZY, mas em um mesmo instante do codigo preciso dar um select para pegar a NFiscal e outro objeto a partir dae perco a sessao e nao consigo pegar os objetos relacionados com NFiscal
Por exemplo
Aqui populo meu objeto NFiscal
nFiscal = nFController.getNFiscal(empresa,
new Float(dfrm.getTxtNFNumber().getText()),
dfrm.getTxtSerie().getText(), empresa.getCgc());
e logo abaixo
estados = estController.getByUF(nFiscal.getCliente().getClientesConsult().getUf());
depois disso se eu tentar buscar
por exemplo vai me gerar uma Exception pois eu dei um clear na sessao ao buscar estados e o relacionamento esta com Lazy
O que voces me recomendam a melhor pratica de programaçao para resolver esse problema, passar a utilizar EAGER (mas assim em casos que funcionaria normalmente com Lazy, e que nao precisaria popular todos relacionamentos vou ter perda de desempenho) nos relacionamentos, continuar com LAZY mas chamar os getObjeto que vou precisar e assim executar os selects e popular objetos auxiliares…?
Segue um metodo de busca no meu GenericDAO
protected <T extends Serializable> T getPurePojo(String query, Object[]... parametros) {
em.clear();//aqui me zera a sessao e gera todo o problema
Query qr = em.createNamedQuery(query);
for (Object[] param : parametros) {
qr.setParameter(param[0].toString(), param[1]);
}
Object retorno = qr.getSingleResult();
return (T) retorno;
}
Obrigado.