[Resolvido] Hibernate: Problema com SQLQuery e campos com nomes iguais  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
Ev3rton
JavaBaby
[Avatar]

Membro desde: 18/02/2010 21:07:20
Mensagens: 90
Localização: Cambará/ Paraná
Offline

Olá pessoal,

Estou com problemas para executar a seguinte SQLQuery no Hibernate. Ao executa-la recebo uma mensagem dizendo que a coluna 'tx_nome' não existe, mas se executo essa mesma query no banco ela funciona normalmente.


Tentei não renomear as colunas tx_nome, deixando assim:



Dessa maneira a query é executada, mas em todos os campos 'tx_nome' eu recebo o valor do campo 'P.tx_nome'.


Se alguém puder me explicar o que o Hibernate está fazendo, ficarei grato

This message was edited 1 time. Last update was at 20/09/2011 12:24:10

[WWW] [MSN]
fre_d
Java Ninja

Membro desde: 13/06/2007 17:42:02
Mensagens: 259
Localização: Lages - SC
Offline

Já tentou alterar o ORDER BY para as colunas renomeadas com AS ? Verifique usando o log se o sql chega a ser executado e o resultado.

Abraço,

Fred

This message was edited 1 time. Last update was at 19/09/2011 11:10:49

pmlm
GUJ Master

Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Online

Mostra o código onde estás a usar isso.
Ev3rton
JavaBaby
[Avatar]

Membro desde: 18/02/2010 21:07:20
Mensagens: 90
Localização: Cambará/ Paraná
Offline

fre_d wrote:Já tentou alterar o ORDER BY para as colunas renomeadas com AS ? Verifique usando o log se o sql chega a ser executado e o resultado.

Abraço,

Fred


Tentei renomear novamente as colunas e fazer o ORDER BY pelo novo nome delas, mesmo assim não funcionou, deu o mesmo problema de quando eu apenas renomeava elas:
org.hibernate.exception.SQLGrammarException: could not execute query
...
Caused by: java.sql.SQLException: Column 'tx_nome' not found

Então executei sem renomear as colunas e agora ativei a opção show_sql no hibernate.cfg. A query é executada do mesmo jeito que a envio, mas quando faço um query.list() o array de objetos vem errado (como disse acima, todos os tx_nome iguais).


pmlm wrote:Mostra o código onde estás a usar isso.




Onde a variável 'query' é uma String com a query que citei no primeiro post.

This message was edited 1 time. Last update was at 19/09/2011 11:45:40

[WWW] [MSN]
pmlm
GUJ Master

Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Online

Se renomeares as colunas, onde ocorre o erro? Não me parece que seja aí...
Ev3rton
JavaBaby
[Avatar]

Membro desde: 18/02/2010 21:07:20
Mensagens: 90
Localização: Cambará/ Paraná
Offline

pmlm wrote:Se renomeares as colunas, onde ocorre o erro? Não me parece que seja aí...


Se renomeio as colunas não funciona, dispara a exceção que falei acima. Eu também achei estranho, mas se eu renomeio apenas uma coluna (ex: P.tx_nome AS tx_nome_produtor) já dispara a exceção na hora que vai executar.


Por enquanto eu criei uma view para essa consulta com os campos renomeados, ai consigo utilizar eles normalmente, mas eu gostaria de saber de onde vem esse problema...

[WWW] [MSN]
pmlm
GUJ Master

Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Online

Mas em que sítio é que dá exactamente esse erro? Mostra o stacktrace.
Ev3rton
JavaBaby
[Avatar]

Membro desde: 18/02/2010 21:07:20
Mensagens: 90
Localização: Cambará/ Paraná
Offline

pmlm wrote:Mas em que sítio é que dá exactamente esse erro? Mostra o stacktrace.


Achei que a view resolveria meus problemas, mas ao adicionar um WHERE na query recebo de novo o erro dizendo que a coluna tx_nome não existe, mas na view realmente não existe uma coluna tx_nome e nem na query que mando executar há alguma referência a essa coluna.

Agora, consigo executar a seguinte query:


Mas se adicione um WHERE, a deixando assim:


Já não funciona e recebo a seguinte exceção (mesma que ocorria sem a view, como falei no começo do tópico):



E a classe que estou utilizando para fazer os testes:



Se executo essa query no banco, funciona normalmente.
[WWW] [MSN]
pmlm
GUJ Master

Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Online

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html#d0e17495
Ev3rton
JavaBaby
[Avatar]

Membro desde: 18/02/2010 21:07:20
Mensagens: 90
Localização: Cambará/ Paraná
Offline



Acho que não entendi muito bem...

O meu caso seria o 18.1.1 do manual pois não pretendo transformar o resultado desta query em uma lista de entidades. O manual também não diz que há problemas em renomear os campos em um query desde que seu resultado não seja transformado em uma entidade.

Então ainda continuo sem entender o que se passa na execução dessa query.


Edit:

Problema resolvido.
Aparentemente é um problema relacionado ao conector do MySQL e não tem a ver com o Hibernate.
Para solucionar alterei a propriedade hibernate.connection.url no hibernate.cfg, adicionei uma flag, a deixando assim:


Agora está tudo funcionando, pra quem quiser saber mais detalhes sobre o problema abaixo os links que consultei:
http://bugs.mysql.com/bug.php?id=35150
https://hibernate.onjira.com/browse/HHH-4174
http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
http://thinkinginsoftware.blogspot.com/2011/05/javasqlsqlexception-column-name-not.html


Obrigado a todos que responderam ao tópico

This message was edited 1 time. Last update was at 20/09/2011 12:22:53

[WWW] [MSN]
pmlm
GUJ Master

Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Online

Vê o 18.1.4
Until now, the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries that join multiple tables, since the same column names can appear in more than one table.[/qtuote]

This message was edited 1 time. Last update was at 20/09/2011 12:23:10

Ev3rton
JavaBaby
[Avatar]

Membro desde: 18/02/2010 21:07:20
Mensagens: 90
Localização: Cambará/ Paraná
Offline

pmlm wrote:Vê o 18.1.4
Until now, the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries that join multiple tables, since the same column names can appear in more than one table.


Como eu disse acima, não queria trabalhar com entidades.


[ ]'s

This message was edited 1 time. Last update was at 20/09/2011 12:28:10

[WWW] [MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team