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

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,

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.

Qual a query que é executada?

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!

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!

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

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

Abraço!

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

[quote=Gabriel Galhardi]pra se bem sincero não me lembro como resolvi…
já tento passa essa query sql pra hql? [/quote]

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!

Olá pessoal, sei que o post é antigo, tive o mesmo problema e consegui resolver, encontrei a dica nesse link: http://opensource.atlassian.com/projects/hibernate/browse/HHH-951
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!