Como faço para fazer um instanceof em uma query no JPA:
Ex.:
Query query = em.createQuery("from com.teste.Pessoa p where p instanceof com.teste.Usuario");
Tem como fazer algo do tipo?
Como faço para fazer um instanceof em uma query no JPA:
Ex.:
Query query = em.createQuery("from com.teste.Pessoa p where p instanceof com.teste.Usuario");
Tem como fazer algo do tipo?
Query query = em.createQuery("from com.teste.Usuario u");
Desde que: Usuario implements/extends Pessoa.
cara é um pouco mais complicado:
na verdade tenho uma classe Usuario que tem um atributo do tipo Pessoa, e essa Pessoa pode ser, Funcionario, Gerente ou Administrador, ambos filhos de Pessoa.
Tenho que criar uma query que me retorne todos os usuários que as pessoas são Gerentes (isso é um exemplo)
Query query = em.createQuery("from Usuario u where u.pessoa instanceof Gerente");
Sim tem como eu retornar todos e depois comparar, só que quando eu tiver 500 mil usuários, e apenas 50 gerentes vai ficar meio "pesado", não concorda?
Poderia fazer assim
ArrayList<Usuario> usuarios = new ArrayList<Usuarios>();
Query query = em.createQuery("from Usuario");
List<Usuario> aux = (List<Usuario>) query.getResultList();
for(Usuario u : aux){
if(u.getPessoa() instanceof Gerente)
usuarios.add(u);
}
Só que fica meio "Bacalhau". Não concorda?????
pq vc não faz uma consulta com join:
where usuario.pessoa.id = gerente.id
[]´s
Assim realmente funciona…
Achei que JPA teria alguma maneira de fazer um instanceof sem join, ou pelo menos sem que precisassemos escrever um.
Mais valeu. tá resolvido…
na verdade não sei se tem, nunca procurei, mas acredito que não tenha.
[]´s
Query query = em.createQuery("from Usuario u where u.pessoa in ( select g from Gerente g )");
Também deve resolver. Dá uma olhada em qual possui melhor desempenho.
Query query = em.createQuery("from Usuario u where u.pessoa in ( select g from Gerente g )");Também deve resolver. Dá uma olhada em qual possui melhor desempenho.
[]´s