2011-05-11 20 views
21

Estoy intentando ejecutar siguiente consulta:java.sql.SQLException: no pueda convertir a la representación interna

String query = "select entity, entity.id from Site entity"; 
List resultList = entityManager.createQuery(query).getResultList(); 

y tomar excepción:

[...] 
Caused by: java.sql.SQLException: Fail to convert to internal representation 
    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.CharCommonAccessor.getLong(CharCommonAccessor.java:239) 
    at oracle.jdbc.driver.OracleResultSetImpl.getLong(OracleResultSetImpl.java:552) 
    at oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:1575) 
    at org.jboss.resource.adapter.jdbc.WrappedResultSet.getLong(WrappedResultSet.java:724) 
    at org.hibernate.type.LongType.get(LongType.java:28) 
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163) 
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154) 
    at org.hibernate.type.ManyToOneType.hydrate(ManyToOneType.java:103) 
    at org.hibernate.type.EntityType.nullSafeGet(EntityType.java:204) 
    at org.hibernate.loader.hql.QueryLoader.getResultColumnOrRow(QueryLoader.java:338) 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:606) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:701) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    at org.hibernate.loader.Loader.doList(Loader.java:2220) 
    ... 102 more 

¿Qué estoy haciendo mal? Gracias de antemano.

+0

Hay una pregunta similar aquí http://stackoverflow.com/questions/4268093/how-can-i-prevent-this-exception-java-sql-sqlexception-fail-to-convert-to-inte – zjffdu

Respuesta

60

Sus tipos de datos no coinciden cuando está recuperando los valores de campo. Verifique su código y asegúrese de que para cada campo que está recuperando, el objeto java coincida con ese tipo. Por ejemplo, recuperar una fecha en y int. Si está haciendo una selección *, es posible que haya ocurrido un cambio en los campos de la tabla que causa este error. Su SQL solo debe seleccionar los campos que desea específicamente para evitar este error.

Espero que esto ayude.

+6

gracias +1 por la respuesta ... ¿por qué no es aceptado? – Anas

7

Compruebe su clase de Entidad. Use String insted de Long y float insted of double.

0

Tuve el mismo problema y esta es mi solución. Yo tenía el siguiente código:

se.GiftDescription = rs.getString(1); 
se.GiftAmount = rs.getInt(2); 

Y lo cambié a:

se.GiftDescription = rs.getString("DESCRIPTION"); 
se.GiftAmount = rs.getInt("AMOUNT"); 

Y el problema era, después de que reinicia el PC, las posiciones de columna cambiado. Es por eso que tengo este error.

0

Consulte con su clase de bean. El tipo de datos de columna y el tipo de datos de beans deben ser los mismos.

Cuestiones relacionadas