2011-05-11 2 views
21

Je suis en train d'exécuter la requête suivante:java.sql.SQLException: Défaut de se convertir à la représentation interne

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

Et prendre exception:

[...] 
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'est-ce que je fais mal? Merci d'avance.

+0

Il ya une question similaire ici http://stackoverflow.com/questions/4268093/how-can-i-prevent-this-exception-java-sql-sqlexception-fail-to-convert-to-inte – zjffdu

Répondre

60

Vos types de données ne concordent pas lorsque vous récupérez les valeurs de champ. Vérifiez votre code et assurez-vous que pour chaque champ que vous récupérez, l'objet Java correspond à ce type. Par exemple, récupérer une date dans et int. Si vous faites un select * alors il est possible qu'un changement dans les champs de la table se soit produit causant cette erreur. Votre SQL ne doit sélectionner que les champs que vous souhaitez spécifiquement afin d'éviter cette erreur.

Espérons que cela aide.

+6

merci +1 pour la réponse ... pourquoi n'est-elle pas acceptée? – Anas

7

Vérifiez votre classe Entity. Utilisez String insted de Long et float insted de double.

0

J'ai eu le même problème et c'est ma solution. J'ai eu le code suivant:

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

Et je l'ai changé:

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

Et le problème, après avoir redémarré mon PC, les positions de colonne changé. C'est pourquoi j'ai eu cette erreur.

0

Vérifiez auprès de votre classe de haricots. Le type de données de colonne et le type de données du bean doivent être identiques.

Questions connexes