web-dev-qa-db-ja.com

java.sql.SQLException:内部表現への変換に失敗しました

私は次のクエリを実行しようとしています:

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

そして例外を取ります:

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

何が間違っていますか?前もって感謝します。

34
Ket

フィールド値を取得するときに、データ型が一致しません。コードを確認し、取得するフィールドごとに、Javaオブジェクトがそのタイプに一致することを確認してください。たとえば、日付をintおよびintに取得します。select*を実行している場合は、テーブルのフィールドで変更が発生し、このエラーが発生している可能性がありますこのエラーを回避するには、SQLで特に必要なフィールドのみを選択する必要があります。

お役に立てれば。

80
Ashish

Entityクラスを確認してください。 Longの代わりにStringを使用し、doubleの代わりにfloatを使用します。

12
BlackKat

私は同じ問題を抱えていましたが、これが私の解決策です。私は次のコードを持っていました:

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

そして、それを次のように変更しました。

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

問題は、PCを再起動した後、列の位置が変更されたことです。そのため、このエラーが発生しました。

Beanクラスを確認してください。列データ型とBeanデータ型は同じでなければなりません。

0
Sudha Susarita