[Hibernate] ORA-00918: coluna definida de maneira ambígua

9 respostas
L

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:

ORA-00918: coluna definida de maneira ambígua

Algo que encontrei a respeito (mas sem solução ainda, aparentemente)

No meu caso não acredito se tratar de problemas de conflito de nome de colunas, o problema é ao utilizar:

query.setFirstResult(registroInicial);
query.setMaxResults(quantidadeRegistros);

Se alguém já teve esse problema e conseguiu resolver, ficaria grato pela ajuda.

Att,

9 Respostas

I

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

Qual a query que é executada?

L

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

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

ja passei por isso, no meu caso a criação do Alias nao estava ocorrendo corretamente.

L

Olá Gabriel, tudo bem?
Você conseguiu alguma alternativa, usando HQL mesmo?
Eu ainda continuo usando SQL nativa para resolver o problema.

Abraço!

G

pra se bem sincero não me lembro como resolvi…
já tento passa essa query sql pra hql?

L

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!

Abraços!

T
Olá pessoal, sei que o post é antigo, tive o mesmo problema e consegui resolver, encontrei a dica nesse link: <a href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-951">http://opensource.atlassian.com/projects/hibernate/browse/HHH-951</a>

O erro acontece quando se usa @Column minúsculo ao invés de maiúsculo, exemplo:

@Column(name=“empresa”)

private long idEmpresa;
Alterando para:

@Column(name=EMPRESA)

private long idEmpresa;

Funciona corretamente!

Abraços!

Criado 22 de junho de 2009
Ultima resposta 18 de dez. de 2009
Respostas 9
Participantes 5