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
Что я делаю неправильно?
Заранее благодарю вас.
Ответы
Ответ 1
Типы данных не совпадают, когда вы извлекаете значения полей. Проверьте свой код и убедитесь, что для каждого поля, которое вы извлекаете, что java-объект соответствует этому типу. Например, получение даты в и int. Если вы делаете select *, тогда возможно изменение в полях таблицы, вызвавшее эту ошибку. Ваш SQL должен выбирать только нужные вам поля, чтобы избежать этой ошибки.
Надеюсь, что это поможет.
Ответ 2
Проверьте класс Entity. Используйте String insted of Long и float insted double.
Ответ 3
У меня была такая же проблема, и это мое решение. У меня был следующий код:
se.GiftDescription = rs.getString(1);
se.GiftAmount = rs.getInt(2);
И я изменил его на:
se.GiftDescription = rs.getString("DESCRIPTION");
se.GiftAmount = rs.getInt("AMOUNT");
И проблема в том, что после перезагрузки моего ПК позиции столбца изменились. Вот почему я получил эту ошибку.
Ответ 4
Обратитесь к классу bean.
Тип данных столбца и тип данных bean должны быть одинаковыми.