Boa tarde a todos!
Gostaria de saber o porque estou tendo o comportamento explicado abaixo e se isso é bom ou ruim, pois, achei estranho.
Estou com uma hql assim:SELECT new br.com.pacote.vo.ConsultaVO(minhaEntidade) FROM br.com.pacote.entity.MinhaEntidade AS minhaEntidade WHERE minhaEntidade.outraEntidade = :outraEntidade
Vi aqui que as consultas que são feitas na base a partir desse hql são: uma consulta para buscar somente o identificador de todos os registros (respeitando o filtro, como o esperado). select minhaentidade0_.id as col_0_0_ from meu_schema.minha_entidade minhaentidade0_ where minhaentidade0_.id_outra_entidade=1
Repare que as condições do where são as que o usuário informou como filtro (minhaentidade0_.id_outra_entidade=1).
E com a lista de identificadores em mãos são executadas uma query por identificador encontrado. -- query executada para cada identificador encontrado
select minhaentidade0_.id as id358_4_, minhaentidade0_.cd_cid_principal as cd13_358_4_, minhaentidade0_.cd_indicacao_acidente as cd2_358_4_ from meu_schema.minha_entidade minhaentidade0_ inner join meu_schema.outra_entidade outraentidade1_ on minhaentidade0_.id_outra_entidade=outra_entidade1_.id where minhaentidade0_.id=10
Observando que o identificador 10 ( minhaentidade0_.id=10 ) foi retornado do select anterior.
Sendo que o mais comum é que uma busca seja feita direto em somente um sql: select minhaentidade0_.id as id358_4_, minhaentidade0_.cd_cid_principal as cd13_358_4_, minhaentidade0_.cd_indicacao_acidente as cd2_358_4_ from meu_schema.minha_entidade minhaentidade0_ inner join meu_schema.outra_entidade outraentidade1_ on minhaentidade0_.id_outra_entidade=outra_entidade1_.id where minhaentidade0_.id_outra_entidade=1
A única vantagem desta técnica seria para consultas que raramente retornassem registros, pois, assim economizaria no JOIN.
Obrigado!