Numeric Overflow com JPA Hibernate

11 respostas
JoseBarros

Ola Amigos,

Estou recebendo um erro na execução de uma query

Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.doList(Loader.java:2231)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
	at org.hibernate.loader.Loader.list(Loader.java:2120)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
	... 73 more
Caused by: java.sql.SQLException: Numeric Overflow
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:7465)
	at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:123)
	at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:521)
	at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1563)
	at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:275)
	at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:275)
	at org.hibernate.type.IntegerType.get(IntegerType.java:51)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
	at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1121)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:588)
	at org.hibernate.loader.Loader.doQuery(Loader.java:724)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.doList(Loader.java:2228)

Na tabela em questão existe uma coluna NUMBER.

Name              Null Type           
----------------- ---- -------------- 
EVENT_NO      NUMBER

A tabela esta mapeada assim

@Id
@Column(name = "EVENT_NO")
private Integer id;

Acontece que o valor retornado pela query ([telefone removido]) e maior que integer que vai ate [telefone removido].

Tentando mudar o meu tipo java para Long, recebo um

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

O que fazer agora? Alguém tem uma solução?

11 Respostas

ivandasilva

Será que alterando no banco e no seu mapeamento ORM não funciona, apenas um chute

fabiomedeirosf

Mude o tipo do seu id para Long.

JoseBarros

Nao posso mudar o banco e isto esta em produção.

JoseBarros

Ja tentei mudar o id para diversos tipos, Long, Float, BigInteger, nada funciona.

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigInteger

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

Parece que o hibernate so esta aceitando um Integer ali!!!

fabiomedeirosf

E Double na sua entidade, já tentou?

JoseBarros

Ja sim.

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double

maior_abandonado

JoseBarros:
Ola Amigos,

Estou recebendo um erro na execução de uma query

Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.doList(Loader.java:2231)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
	at org.hibernate.loader.Loader.list(Loader.java:2120)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
	... 73 more
Caused by: java.sql.SQLException: Numeric Overflow
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:7465)
	at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:123)
	at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:521)
	at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1563)
	at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:275)
	at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:275)
	at org.hibernate.type.IntegerType.get(IntegerType.java:51)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
	at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1121)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:588)
	at org.hibernate.loader.Loader.doQuery(Loader.java:724)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.doList(Loader.java:2228)

Na tabela em questão existe uma coluna NUMBER.

Name              Null Type           
----------------- ---- -------------- 
EVENT_NO      NUMBER

A tabela esta mapeada assim

@Id
@Column(name = "EVENT_NO")
private Integer id;

Acontece que o valor retornado pela query ([telefone removido]) e maior que integer que vai ate [telefone removido].

Tentando mudar o meu tipo java para Long, recebo um

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

O que fazer agora? Alguém tem uma solução?

não tem alguma FK no seu banco utilizando este campo, seja como referenciador ou como referenciado?

outra coisa que ia sugerir o teste é mudar para double ou float (primitivo mesmo).

JoseBarros

maior_abandonado:
JoseBarros:
Ola Amigos,

Estou recebendo um erro na execução de uma query

Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.doList(Loader.java:2231)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
	at org.hibernate.loader.Loader.list(Loader.java:2120)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
	... 73 more
Caused by: java.sql.SQLException: Numeric Overflow
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:7465)
	at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:123)
	at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:521)
	at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1563)
	at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:275)
	at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:275)
	at org.hibernate.type.IntegerType.get(IntegerType.java:51)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
	at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1121)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:588)
	at org.hibernate.loader.Loader.doQuery(Loader.java:724)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.doList(Loader.java:2228)

Na tabela em questão existe uma coluna NUMBER.

Name              Null Type           
----------------- ---- -------------- 
EVENT_NO      NUMBER

A tabela esta mapeada assim

@Id
@Column(name = "EVENT_NO")
private Integer id;

Acontece que o valor retornado pela query ([telefone removido]) e maior que integer que vai ate [telefone removido].

Tentando mudar o meu tipo java para Long, recebo um

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

O que fazer agora? Alguém tem uma solução?

não tem alguma FK no seu banco utilizando este campo, seja como referenciador ou como referenciado?

outra coisa que ia sugerir o teste é mudar para double ou float (primitivo mesmo).

Ja tentei, double, float e tanto objeto como primitivo. Mesmo problema. E nao tem FK utilizando esse campo!

Alguem tem alguma outra ideia???

A

Mesmo problema!

Alguém sabe a solução?

A

Resolvi dessa forma:

JotaJota

Pode ver que dá exceção em um monte de getInt()
Provavelmente é a propriedade ID ou alguma outra propriedade do tipo integer da sua entidade, que na hora que faz o Parse do registro para um objeto, ele não consegue colocar aquele valor porque não tem espaço.

Provavelmente algum valor de campo Inteiro de algum registro que está no retorno desta consulta (query) é tão grande que não cabe na propriedade do objeto.
Tente trabalhar com os próximos tipos inteiros ( long, Long BigInteger) em todos os campos do tipo Integer de sua entidade.

Eu tive um problema parecido, eu tinha um registro que tinha um id = 994999219998213259939 (exemplo)

Este id era do tipo Long no objeto e quando eu fazia a query, este registro estava nesta listagem e não funcionava. numeric overflow ! resolvi trocando o tipo Long para BIGINTEGER

Espero ter ajudado.

Até mais.

Criado 30 de março de 2012
Ultima resposta 18 de out. de 2013
Respostas 11
Participantes 6