Sempre dei prioridade a rapidez e agilidade em sistema, site, etc... Sempre estudei e tentei ver a melhor maneira do ocorrido, porem nunca tinha percebido isso do select, alias até tinha, mais na verdade nunca tinha entendido o procedimento da operação lazzy, e realmente, faz 2 select no banco de dados, primeiro retorna os livros e depois os autor, penso em uma aplicação grande, e bastante de gente usando, o quanto ia ser prejudicial.
Porem eu também sempre usei o CDI, para cuidar das minhas transação e instanciar objetos e todas as vantagens que ele nos traz.
Iniciei o curso com você, mais não uso as ferramentas que você usa, por exemplo uso tomcat, to usando CDI para minhas transação, algumas coisas diferentes.
Fiz os 2 metodos um do proprio EntntyManager.
public Livro buscarLivroPorCodido(Long codigo) {
return manager.find(Livro.class, codigo);
}
e outro personalizado.
public Livro buscar(Long codigo) {
return manager.createQuery("SELECT l FROM Livro AS l INNER JOIN l.autores AS a"
+ " WHERE l.codigo = :pCodigo", Livro.class).setParameter("pCodigo", codigo).getSingleResult();
}
Mais o retorno do meu select foram os mesmo, os 2 estão indo no banco 2 veses, queria que o meu buscar, fosse apenas 1 e ja retornasse o meu livros com os autores, oque que pode ser? Alguma coisa do CDI?.
meu EntityManager...
@SuppressWarnings("serial")
public class LivroDao implements Serializable{
@Inject
private EntityManager manager;
E meu console do resultado :(
Hibernate: select livro0_.codigo as codigo1_1_, livro0_.capaPath as capaPath2_1_, livro0_.dataLancamento as dataLanc3_1_, livro0_.descricao as descrica4_1_, livro0_.numeroPaginas as numeroPa5_1_, livro0_.titulo as titulo6_1_, livro0_.valor as valor7_1_ from Livro livro0_ inner join Livro_Autor autores1_ on livro0_.codigo=autores1_.Livro_codigo inner join Autor autor2_ on autores1_.autores_codigo=autor2_.codigo where livro0_.codigo=?
Hibernate: select autores0_.Livro_codigo as Livro_co1_2_0_, autores0_.autores_codigo as autores_2_2_0_, autor1_.codigo as codigo1_0_1_, autor1_.nome as nome2_0_1_ from Livro_Autor autores0_ inner join Autor autor1_ on autores0_.autores_codigo=autor1_.codigo where autores0_.Livro_codigo=?