Dúvida com SQL nativo no hibernate

6 respostas
BMuniz

Pessoal,

Eu estou disparando uma SQL query pelo hibernate, o problema é que tenho dois campos em tabelas diferente com o mesmo nome, exemplo:

cliente->nome
usuario->nome

O problema que no retorno sempre o “cliente->nome” sobrescreve o “usuario->nome”

Já tentei addEntity na query, mas, não retorna o resultado desejado.

Segue o código abaixo.

String sql ="select" +
                    " n.tipoNegocio," +
                    " n.numero," +
                    " c.nome, " +
                    " p.totalNominal," +
                    " u.nome," +
                    " n.dataAtualizacao" +
               " from" +
                    " negocioexportado n," +
                    " cliente c," +
                    " proposta p," +
                    " usuario u" +
                " where" +
                    " n.numero = p.numero" +
                " and" +
                    " p.cliente = c.id" +
                " and" +
                      " c.usuario = u.id" +
                 " and" +
                       " n.numero =" + negocioexportado.getNumero();
Query qry = session.createSQLQuery(sql);

List listanegociospornumero = qry.list();

return listanegociospornumero;

Desde já valeu pela ajuda!

6 Respostas

marcos1EM

Já tentou utilizar alias?

BMuniz

Você diz o Alias no próprio SQL?

R

Alias no SQL.
Algo como:

String sql ="select" +   
                    " n.tipoNegocio," +   
                    " n.numero," +   
                    " c.nome as nome_cliente, " +   
                    " p.totalNominal," +   
                    " u.nome as nome_usuario," +   
                    " n.dataAtualizacao" +   
               " from" +   
                    " negocioexportado n," +   
                    " cliente c," +   
                    " proposta p," +   
                    " usuario u" +   
                " where" +   
                    " n.numero = p.numero" +   
                " and" +   
                    " p.cliente = c.id" +   
                " and" +   
                      " c.usuario = u.id" +   
                 " and" +   
                       " n.numero =" + negocioexportado.getNumero();   
Query qry = session.createSQLQuery(sql);   
  
List listanegociospornumero = qry.list();   
  
return listanegociospornumero;
BMuniz

Rafael_rst

Eu fiz o que você me falou e gerou o seguinte erro:

java.sql.SQLException: Column 'nome' not found. /* A coluna existe em ambas as tabelas*/
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
	com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1145)
	com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5617)
	org.hibernate.type.StringType.get(StringType.java:18)
	org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
	org.hibernate.type.NullableType.nullSafeGet(NullableType.java:139)
	org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:198)
	org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:595)
	org.hibernate.loader.Loader.doQuery(Loader.java:689)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
	org.hibernate.loader.Loader.doList(Loader.java:2145)
	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
	org.hibernate.loader.Loader.list(Loader.java:2024)
	org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:118)
	org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1684)
	org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
	org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:164)
BMuniz

Ninguém sabe?

H

Ola todos,

Esse erro estoura quando vc tenta utilizar o list gerado ou quando chama o hql?

Contudo não sei se é o mais bonito a ser feito :oops: , mas vc poderia criar uma class que atenda os padrões informados e dar um new no hql

HQL

"SELECT NEW br.suaPackage.ListaNegocioPorDinheiro(n.tipoNegocio, n.numero, c.nome, p.totalNominal, u.nome, n.dataAtualizacao) " + " from" + " negocioexportado n," + " cliente c," + " proposta p," + " usuario u" + " where" + " n.numero = p.numero" + " and" + " p.cliente = c.id" + " and" + " c.usuario = u.id" + " and" + " n.numero =" + negocioexportado.getNumero();

E crie também um construtor compativel com o hql:

OU Ainda poderia retornar os objetos:

"select" + " n, " + " c, " + " p," + " u," + " from" + " negocioexportado n," + " cliente c," + " proposta p," + " usuario u" + " where" + " n.numero = p.numero" + " and" + " p.cliente = c.id" + " and" + " c.usuario = u.id" + " and" + " n.numero =" + negocioexportado.getNumero();

Criado 25 de janeiro de 2011
Ultima resposta 26 de jan. de 2011
Respostas 6
Participantes 4