Fala pessoal, estava fazendo uns testes na minha tabela e na consulta dela e vi que estava carregando todos os campos, quando na verdade só preciso de 4 (estava trazendo mais de 10 campos antes e isso estava travando meu programa), fiz a jpql nova para poder trazer só o que preciso mas esta me retornando este erro agora → Cannot create TypedQuery for query with more than one return using requested result type [br.com.infoarte.commons.model.produto.Produto]
minha Query e o construtor que eu chamo nas tabelas é este;
//Construtor que é chamado nas classe que tem tabela para popular a mesma;
public <T> ConsultasSql(JTable table, Class<T> classe, String className, String fieldsToSearch, JComboBox<?> box,JTextField field) {
logger.info("Populando a tabela");
consultaAll(table,classe,className,fieldsToSearch,box,field);
consultaLike(table,classe,className,fieldsToSearch,box,field);
}
//chama a consulta 'like' e faz a validação para só buscar quando tiver 3 caracteres digitados
private<T> void consultaLike(JTable table, Class<T> classe, String className, String fieldsToSearch, JComboBox<?> box,JTextField field) {
logger.debug("Iniciando consulta");
field.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ev) {
List<T> classes;
TypedQuery<T> queryLike = em.createQuery("SELECT "+ fieldsToSearch +" FROM "+className
+" e WHERE upper(CAST(e."+getColunmNameFromComboBox(box)+" as string))"
+" like '%"+field.getText().toUpperCase()+"%'",classe);
classes = queryLike.getResultList();
changeClass(classe, table, classes);
}
});
}
//Quando o campo de busca estiver vazio este sera o método retornado
private<T> void consultaAll(JTable table, Class<T> classe, String className, String fieldsToSearch, JComboBox<?> box,JTextField field) {
logger.debug("Iniciando consulta");
if(field.getText().isEmpty() || field.getText().length() <= 3) {
List<T> classes;
TypedQuery<T> queryAll = em.createQuery("SELECT "+ fieldsToSearch +" FROM "+className+" e", classe);
classes = queryAll.getResultList();
changeClass(classe, table, classes);
}
}
Exemplo da chamada:
private JTable getTableProduto() {
if (tableProduto == null) {
tableProduto = new JTable();tableProduto.setAutoCreateRowSorter(true);
tableProduto.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableProduto.setModel(new ProdutoTableModel(new ArrayList<Produto>()));
tableProduto.getColumnModel().getColumn(0).setPreferredWidth(20);
tableProduto.getColumnModel().getColumn(1).setPreferredWidth(150);
tableProduto.getColumnModel().getColumn(2).setPreferredWidth(40);
tableProduto.getColumnModel().getColumn(3).setPreferredWidth(10);
new ConsultasSql(tableProduto,Produto.class,"Produto","prodDesc, precoLista, custoMedio",comboBoxProdSearch,textFieldProdSearch);
}
return tableProduto;
}
Procurei bastante por esse erro aqui no Guj e em fóruns gringos, mas nada de achar uma solução, eu teria que mudar o tipo de consulta, ou tem alguma outra forma de resolver isso? e o que exatamente seria esse erro?