[Hibernate] ORA-00918: coluna definida de maneira ambígua
9 respostas
L
Luiz_Gustavo
Olá galera,
dei uma procurada aqui por esse erro e não encontrei nada a respeito, por isso rsolvi abrir um novo tópico.
Alguém já teve esse problema com a paginação de banco, usando o Hibernate e o Oracle:
O erro provavelmente não está nessas linhas, Alguma coluna de sua entidade está sendo mapeada duas vezes… Tente colocar insertable = false e updatable = false em uma delas ou remova a duplicidade, se não conseguir resolver o problema, post a sua entidade aqui.
P
pmlm
Qual a query que é executada?
L
Luiz_Gustavo
Olá Ignácio, tudo bem?
Quanto ao mapeamento duplicado, tenho certeza de que não é esse o problema. Essa consulta já era realizada sem a paginação, sem problemas.
O problema me parece ser na SQL resultante, montada pelo Hibernate. Essa consulta, pelo que andei lendo, envolve subselects, e ele (Hibernate) por algum motivo, duplica colunas, algo assim.
O link que eu coloquei no primeiro post leva aos detalhes de um bug ainda não resolvido no Hibernate (setMaxResults causes “ORA-00918: column ambiguously defined” exception ).
Por hora resolvi o problema criando uma consulta nativa do Oracle, com a paginação utilizando ROWNUM.
sql.append("SELECT * FROM ");
sql.append("(SELECT a.*, ROWNUM rnum ");
sql.append("FROM (SELECT * FROM TABELA ");
sql.append("WHERE TABELA.CAMPO1 = ? ");
sql.append("AND TABELA.CAMPO2 = ? ");
sql.append("ORDER BY TABELA.CAMPO3) a ");
sql.append("WHERE ROWNUM <= ?) ");
sql.append("WHERE rnum > ? ");
O curioso é que em outras consultas setFirstResult e setMaxResults funcionam.
Abraços e obrigado pelas dicas!
L
Luiz_Gustavo
Olá pmlm,
a query, modificada para não expor nomes de tabelas e colunas do sistema, é a que citei acima. Bem simples por sinal.
Como disse, em outras consultas, até mais complexas, o erro não aparece.
Abraços!
G
Gabriel_Galhardi
ja passei por isso, no meu caso a criação do Alias nao estava ocorrendo corretamente.
L
Luiz_Gustavo
Olá Gabriel, tudo bem?
Você conseguiu alguma alternativa, usando HQL mesmo?
Eu ainda continuo usando SQL nativa para resolver o problema.
Abraço!
G
Gabriel_Galhardi
pra se bem sincero não me lembro como resolvi…
já tento passa essa query sql pra hql?
L
Luiz_Gustavo
Gabriel Galhardi:
pra se bem sincero não me lembro como resolvi…
já tento passa essa query sql pra hql?
Então, ela estava em HQL, e eu tive que justamente passar para SQL para resolver o problema, usando o ROWNUM que citei alí acima. Em SQL nativa ela funciona bem, só com o HQL e usando setFirstResult e setMaxResults que ela dá o problema.
Bom, por hora vou deixar assim… está funcionando.
Quando encontrar algo posto aqui!