DE SQL PARA HQL(linguagem SQL do Hibernate) - RESOLVIDO

1 resposta
R

TEnho que fazer o seguinte SQLQuery para pegar dados do meu DB:
Obs: Banco de Dados é o Firebird 2.0, e a SQL funciona perfeitamente. xD

List<Pedido> listPedido = new ArrayList<Pedido>();
SQLQuery select = sessao.createSQLQuery("SELECT * FROM PEDIDO WHERE CONT_COMANDA ="+contComanda+
                " AND EXTRACT(MONTH FROM DATA_PEDIDO)='" + mes+"' AND SUBSTRING(CAST(EXTRACT(YEAR FROM DATA_PEDIDO) AS VARCHAR(4)) FROM 3 FOR 4 ) ='" + ano+"'");

listPedido = select.list();

Como transformar essa SQLQuery em uma Query, pois tenho que usar a HQL para tal…?
Quero fazer isso pq quando eu retorno um obj de uma lista que receba dados de uma SQLQuery sempre ta gerando uma java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to modPedido.Pedido

Um pequeno exemplo para ficar mais facil de entender:

Se eu realizar um select assim não da erro nenhum:

List<Pedido> listPedido = new ArrayList<Pedido>();
Query select = sessao.createQuery("from Pedido");
listPedido = select.list();
System.out.println( listPedido.get(0).getCliente() );

Agora…se eu realizar um select usando SQLQuery da um erro na linha do System.out.println:

List<Pedido> listPedido = new ArrayList<Pedido>();
SQLQuery select = sessao.createSQLQuery("from Pedido");
listPedido = select.list();
System.out.println( listPedido.get(0).getCliente() );

1 Resposta

R

SOLUÇAO:
A diferença entre retornos de consulta em HQL e SQL no hibernate é que em HQL ( Utilizando a interface Query) faz ligaçao com o Objeto a qual é representado a Tal tabela no DB, por isso é só fazer um CAST que fica tudo tranks…
Ja utilziando a SQLQuery, deve-se adicionar a entidade persistence, como mostra no trecho de código abaixo:

SQLQuery select = sessao.createSQLQuery("SELECT * FROM PEDIDO WHERE CONT_COMANDA ="+contComanda+  
           " AND EXTRACT(MONTH FROM DATA_PEDIDO)='" + mes+"' AND SUBSTRING(CAST(EXTRACT(YEAR FROM DATA_PEDIDO) AS VARCHAR(4)) FROM 3 FOR 4 ) ='" + ano+"'").addEntity(Pedido.class);
Criado 11 de março de 2008
Ultima resposta 12 de mar. de 2008
Respostas 1
Participantes 1