Erro hibernate para consulta com ordenação

7 respostas Resolvido
java
R

Caros amigos, estou trabalhando numa manutenção de site que eles querem a ordenação das datas de pagamento, porem esta dando o seguinte erro: Incorrect syntax near the keyword ‘order’. o metodo que montei ficou assim:
public List findListHolerith(String cpf) throws ServiceException{

List<Holerith> listaHolerith = null;
	Session hSession = HibernateFactory.factory().getSession();
	
	try{
		Criteria hCriteria = hSession.createCriteria(Holerith.class);
		hCriteria.add(Restrictions.eq(Holerith.PROP_cpf ,cpf));
		hCriteria.add(Restrictions.sqlRestriction("convert(Date,Dtpagamento,103"));
		hCriteria.addOrder(Order.desc(Holerith.PROP_dtPagamento));
		
		listaHolerith = hCriteria.list();
		
	} catch(HibernateException e){
		log.error(e.getMessage());
		throw new ServiceException(e);
	} catch(Exception e) {
		log.error(e.getMessage(), e);
		throw new ServiceException(e);
	}
	
	return listaHolerith;

gostaria da ajuda para entender o que fiz errado. o campo dtpagamento no banco esta string e não pode mudar por isso acrescentei o convert.

7 Respostas

javaflex

Usa SQL nativo. Criteria é masoquismo.

pmlm

Isto está correto? Abres ( mas nunca fechas…

R

não entendi, até achei no inicio que eu tinha vacilado em não fechar as aspas… mas esta fechando dentro do parenteses… ou devo colocar aspas simples e as duplas?

pmlm

O problema não são as aspas, são os parenteses.

O que tens dentro de aspas é isto

convert(Date,Dtpagamento,103
R
Solucao aceita

Bom pessoal desisti do criteria e usei querystring para montar minha consulta. Infelizmente trabalhar em sustentação é isso:
ficou assim:

public List<Holerith> findListHolerith(String cpf) throws ServiceException{
                            
                            List<Holerith> listaHolerith = new ArrayList<Holerith>();
                            List<Object[]> listaRetorno = null;
try {        Session hSession = HibernateFactory.factory().getSession();

String queryString = "select cpf, dtPagamento from Holerith "

+ "where cpf  = :cpf  " +

"order by convert(date, dtPagamento, 103)desc " ;
Query hquery = hSession.createQuery(queryString);
            
                            hquery.setParameter("cpf", cpf);
                            
                                            listaRetorno = hquery.list();
                                            
                                            Holerith objholerit;
                                            for(Object[] obj:listaRetorno){
                                                            objholerit = new Holerith();
                                                            objholerit.setCpf((String)obj[0]);
                                                            objholerit.setDtPagamento((String)obj[1]);
                                            listaHolerith.add(objholerit);                                                                      
                                            }
                                            
                                            
                                            
                                            
                            } catch(HibernateException e){
                                            log.error(e.getMessage());
                                            throw new ServiceException(e);
                            } catch(Exception e) {
                                            
                                            log.error(e.getMessage(), e);
                                            throw new ServiceException(e);
                            }
                            finally {
                                                            HibernateFactory.factory().commitTransaction();              
                                                            }
                            
                            return listaHolerith;
            }

s

pmlm

Experimentaste ao menos corrigir

hCriteria.add(Restrictions.sqlRestriction("convert(Date,Dtpagamento,103"));

para

hCriteria.add(Restrictions.sqlRestriction("convert(Date,Dtpagamento,103)"));

?

R

sim meu caro eu tentei, e usei até outros exemplos… mas alguem considerou que era algo rapido então tomamos a decisão de fazer aquela solução… obrigado!

Criado 9 de fevereiro de 2021
Ultima resposta 11 de fev. de 2021
Respostas 7
Participantes 3