java.sql.SQLException:无法转换为内部表示

问题描述 投票:0回答:5

我正在尝试执行以下查询:

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

我做错了什么? 预先感谢您。

jpql
5个回答
100
投票

检索字段值时数据类型不匹配。检查您的代码并确保您要检索的每个字段的 java 对象都与该类型匹配。例如,“将日期检索为 int”。

如果您正在执行

select *
,则表字段可能发生更改,导致发生此错误。您的 SQL 应该只选择您特别想要的字段,以避免出现此错误。


15
投票

检查您的实体类。使用 String 代替 Long,使用 float 代替 double 。


3
投票

检索字段值时,您的数据类型不匹配。

还要检查如何存储枚举,默认为 ORDINAL(存储在数据库中的数字值),但 STRING(存储在数据库中的枚举名称)也是一个选项。确保代码中的实体和数据库中的模型完全相同。

我的枚举不匹配。它被设置为默认值 (ORDINAL),但数据库模型需要字符串 VARCHAR2(100char)。解决方案:

@Enumerated(EnumType.STRING)


1
投票

检查您的 Bean 类。 列数据类型和bean数据类型必须相同。


1
投票

我遇到了同样的问题,这是我的解决方案。我有以下代码:

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

我把它改为:

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

问题是,在我重新启动电脑后,列位置发生了变化。这就是我收到此错误的原因。

© www.soinside.com 2019 - 2024. All rights reserved.