quarta-feira, 28 de setembro de 2011

java.sql.SQLException: ORA-01445

Erro:

java.sql.SQLException: ORA-01445: não é possível selecionar nem gerar amostragem para ROWID em uma view de junção sem uma tabela preservada com chaves.

Esse é um Bug do Oracle que afeta ao menos as versões:
9.2.0.6
10.1.0.4
10.2.0.1

O erro ocorre quando o retorno da SQL excede certo número de colunas.  Esse número excessivo de colunas é geralmente  causado por joins (principalmente quando utiliza-se um framework de persistência ex: Hibernate).

Para resolver o problema:

1) Atualize a versão do Oracle:
9.2.0.8
10.1.0.5
10.2.0.2
11g 
Ou

2)  Adicione @Fetch(FetchMode.SELECT)a alguns de seus relacionamentos. Com isso, será gerado um SQL a parte, o que fará com que o primeiro SQL não tenha o limite de coluna excedido.

Ex:

@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="agentecarga_id", insertable=false,updatable=false)
private Contato agenteCarga;