2011-05-11 4 views
21

sto cercando eseguire query seguente:java.sql.SQLException: Non riescono a convertire in rappresentazione interna

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

e prendere eccezione:

[...] 
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 

Che cosa sto facendo di sbagliato? Grazie in anticipo.

+0

C'è una domanda simile qui http://stackoverflow.com/questions/4268093/how-can-i-prevent-this-exception-java-sql-sqlexception-fail-to-convert-to-inte – zjffdu

risposta

60

I tipi di dati non corrispondono quando si recuperano i valori dei campi. Controlla il tuo codice e assicurati che per ogni campo che stai recuperando l'oggetto java corrisponda a quel tipo. Ad esempio, recuperare una data in e int. Se si sta eseguendo una selezione *, è possibile che si sia verificata una modifica nei campi della tabella causando l'errore. Il tuo SQL dovrebbe selezionare solo i campi che vuoi specificamente per evitare questo errore.

Spero che questo aiuti.

+6

grazie +1 per la risposta ... perché non è accettato? – Anas

7

Controlla la classe di entità. Usa String insted di Long e float insted di double.

0

Ho avuto lo stesso problema e questa è la mia soluzione. Ho avuto il seguente codice:

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

E ho cambiato in:

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

E il problema è stato, dopo aver riavviato il PC, le posizioni delle colonne cambiato. Ecco perché ho ricevuto questo errore.

0

Verificare con la classe di fagioli. Il tipo di dati della colonna e il tipo di dati del bean devono essere uguali.