我正在尝试执行以下查询:
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
我做错了什么? 提前谢谢。
答案 0 :(得分:78)
检索字段值时,您的数据类型不匹配。检查代码并确保对于要检索的每个字段,java对象与该类型匹配。例如,检索日期和int。如果您正在执行select *,则可能会更改表的字段,从而导致发生此错误。您的SQL应该只选择您特别需要的字段以避免此错误。
希望这有帮助。
答案 1 :(得分:10)
检查您的实体类。使用String而不是Long,而不是double。
答案 2 :(得分:2)
检索字段值时,您的数据类型不匹配。
还要检查枚举的存储方式,默认值为ORDINAL(存储在数据库中的数值),但也可以选择STRING(存储在数据库中的枚举名称)。确保代码中的Entity和数据库中的Model完全相同。
我的枚举不匹配。它设置为默认值(ORDINAL),但是数据库模型期望使用字符串VARCHAR2(100char)。解:
sudo a2enmod php7.4
sudo systemctl restart apache2
答案 3 :(得分:1)
我有同样的问题,这是我的解决方案。我有以下代码:
se.GiftDescription = rs.getString(1);
se.GiftAmount = rs.getInt(2);
我改为:
se.GiftDescription = rs.getString("DESCRIPTION");
se.GiftAmount = rs.getInt("AMOUNT");
问题是,重新启动电脑后,列位置发生了变化。这就是我收到这个错误的原因。
答案 4 :(得分:0)
检查你的bean类。 列数据类型和bean数据类型必须相同。