O método find é bom pq nele vc envia qualquer tipo de primary key que ele se resolve, mas além disso eu preciso também informar quais relacionamentos eu gostaria que ele carregasse, aquilo que o join fetch faz. O problema é que se fizer uma query com join fetch não vou ter a facilidade de enviar qualquer tipo de primary key, e no caso aqui elas existem em diversos formatos, dificultando criar um método geral.
Existe algum método ou forma de obter ambas as funcionalidades no jpa 2?
Se você utilizar namedQuery você pode criar um dao genérico onde seu método vai retornar um T.
[/quote]
Então, o problema é que o EAGER me parece exagerado demais na maioria dos casos. Agora fazer um método/query para cada caso vira um inferno já que além de demorar, depois chega um ponto que ninguém mais sabe direito o que já existe, o que é usado, etc,etc. E mudar algo na base causa bastante trabalho para atualizar tudo.
Minha idéia é ter apenas um método para quando se quer apenas uma entidade, informando sua pk, mas também sendo possível trazer as entidades associadas. Creio que não seja o primeiro a ter essa idéia, mas não achei nada assim nas minhas pesquisas.
Não entendi bem sua sugestão de namedQuery, nela eu ainda teria que para cada pk que é objeto extrair campo a campo nao? Não seria igual ao método find.
Imagine que você tenha uma classe com tres listas, A B C. Você quer apenas que a lista B seja EAGER dentro do find.
Creio que teria um reflection muito pesado para descobrir qual classe o find teria que fazer EAGER.
Não sei se esse é o motivo para até hoje não existir um find como você quer, mas com certeza seria um bom pois deixaria mais lento o processo.
A namedQuery fica localizada exatamente em cima da classe. Caso haja alguma alteração na classe que necessite de alteração na consulta, está ali bem visível.
Demorar para fazer? Foi como eu disse, faz um método genérico para rodar qualquer namedQuery enviada. Criar uma namedQuery é fácil uma vez q ela segue o formato de uma SQL.
Eu não me lembro de nada disso em nenhum dos livro que li sobre EJB/JPA, mas posso ter me esquecido.
Mas acho que não exista esse método que você esta procurando.
[quote=jakefrog]Imagine que você tenha uma classe com tres listas, A B C. Você quer apenas que a lista B seja EAGER dentro do find.
Creio que teria um reflection muito pesado para descobrir qual classe o find teria que fazer EAGER.
Não sei se esse é o motivo para até hoje não existir um find como você quer, mas com certeza seria um bom pois deixaria mais lento o processo.
A namedQuery fica localizada exatamente em cima da classe. Caso haja alguma alteração na classe que necessite de alteração na consulta, está ali bem visível.
Demorar para fazer? Foi como eu disse, faz um método genérico para rodar qualquer namedQuery enviada. Criar uma namedQuery é fácil uma vez q ela segue o formato de uma SQL.
Eu não me lembro de nada disso em nenhum dos livro que li sobre EJB/JPA, mas posso ter me esquecido.
Mas acho que não exista esse método que você esta procurando.[/quote]
Acho que vou ficar com a sua sugestão das namedQueries e seguir em frente. Ai se depois eu achar algo mais próximo do que eu estava esperando eu volto a atualizar aqui.