Consulta inicial JPA

11 respostas
marciosouzajunior

Quando crio objetos Query no Netbeans arrastando tabelas pro form, ele cria uma query inicial, por exemplo:

Porém percebi que conforme fui adicionando mais objetos Query e a quantidade de registros nas tabelas foram aumentando,
o form começou a demorar mais pra abrir. Então fui nos objetos e fiz:

Isso deu uma melhorada mas não parece ser o modo correto de fazer. Como resolver este problema?

11 Respostas

Rodrigo_Sasaki

Bom, você realmente precisa buscar todos os usuários ?

lele_vader

Talvez você precise paginar a sua consulta.
O que está demorando é a renderizar a página ?

marciosouzajunior

Rodrigo, não preciso no momento que carrego o form, mas se não colocar uma query retorna um erro:

[color=red]Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Syntax error parsing the query [], line 0, column -1: unexpected end of query.[/color]

lele_vader, não é uma página, é um JInternalFrame. Ele demora pra ser exibido.
Na verdade, como disse pro Rodrigo, não preciso de nenhum resultado nesse momento.

Hebert_Coelho

Se você fizer isso, sua consulta virá vazia. O.o

Você não deveria paginar sua consulta?

marciosouzajunior

Hebert, faço isso justamente pra ela vir vazia. Quando carrego o JInternalFrame, já inicializo essas Querys
e no primeiro momento não preciso de resultados. Acho que da forma como estou fazendo não tem outra saída.

Hebert_Coelho

marciosouzajunior:
Hebert, faço isso justamente pra ela vir vazia. Quando carrego o JInternalFrame, já inicializo essas Querys
e no primeiro momento não preciso de resultados. Acho que da forma como estou fazendo não tem outra saída.
Não seria mais fácil retornar uma lista vazia? Collections.emptyList()?

Ou se você já quer retornar um valor, por que não faz uma pesquisa paginada?

marciosouzajunior

Vc já viu que quando o netbeans cria os componentes pra você, ele cria um método initComponents?
Pois então, dentro desse método eu tenho:

usuarioQuery = java.beans.Beans.isDesignTime() ? null : minhaPUEntityManager.createQuery("SELECT u FROM Usuarios u WHERE u.codigo = -1");
        usuarioList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : usuarioQuery.getResultList();

Então sou obrigado o passar uma query pra ele.

Hebert_Coelho

marciosouzajunior:
Vc já viu que quando o netbeans cria os componentes pra você, ele cria um método initComponents?
Pois então, dentro desse método eu tenho:

usuarioQuery = java.beans.Beans.isDesignTime() ? null : minhaPUEntityManager.createQuery("SELECT u FROM Usuarios u WHERE u.codigo = -1");
        usuarioList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : usuarioQuery.getResultList();

Então sou obrigado o passar uma query pra ele.

Não. Eu não o uso justamente por suas facilidades uma hora virar “dificulidades”.

Mas creio que exista um modo de contornar isso.

Como você está usando o automático da coisa e eu não sei como funciona, boa sorte.

marciosouzajunior

Nada que não tenha como contornar sem perder a produtividade.

Obrigado!

Hebert_Coelho

marciosouzajunior:
Nada que não tenha como contornar sem perder a produtividade.

Obrigado!

Mas está funcionando mesmo? Tanto que você teve que colocar -1 lá. Até que ponto essa produtividade é válida? Quantos mais -1 terão que ser inseridos no código?

Inté

marciosouzajunior

Sim, está funcionando. Tive que colocar 9 desses -1. É bem produtivo arrastar tabelas pro form e já obter a entity manager + query + list.
Mas talvez no atual momento, vendo como as coisas ficaram, talvez seja melhor dar uma organizada na mão mesmo.

Criado 6 de novembro de 2012
Ultima resposta 6 de nov. de 2012
Respostas 11
Participantes 4