gpt4 book ai didi

mysql - Hibernate、Null 值和 nativeSQL

转载 作者:行者123 更新时间:2023-11-29 05:45:51 25 4
gpt4 key购买 nike

我在 mySQL 中使用 hibernate,我遇到了以下问题:我在一个表上执行了一个 nativeSQL 查询,其中有一个字符长的列。此列可以为空。现在我在查询时收到以下异常:

4-feb-2010 10.31.00 org.hibernate.type.NullableType nullSafeGet
INFO: could not read column value from result set: nazeuro; String index out of range: 0
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:686)
at org.hibernate.type.CharacterType.get(CharacterType.java:29)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:189)
at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:474)
at org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:420)
at org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:317)
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)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at Views.Components.QuickLookup$updater.run(QuickLookup.java:102)

我一直在用谷歌搜索来解决这个问题,我什至在这里找到了关于 SO 的帖子,但每次都是关于映射到对象和编写自定义类来处理这个问题。在这种情况下,我需要的是一个对象数组。我知道一个解决方案可能是更改表,但我会避免它,因为我必须使用预先存在的数据库。那么您有什么可能的解决方案吗?


SQLQuery query = sess.createSQLQuery("SELECT * from " + table + " WHERE " + filter + " LIKE '" + search + "%'");
System.out.println(query.toString());
List<Object[]> result = query.list();

最佳答案

您使用的是哪个 Hibernate 版本?在 3.3.2 中,这是 CharacterType.get():

public Object get(ResultSet rs, String name) throws SQLException {
String str = rs.getString(name);
if (str==null) {
return null;
}
else {
return new Character( str.charAt(0) );
}
}

如果这不是很明显,则异常表明您从结果集中获得了一个空的非空字符串 (""),这会导致 CharacterType barf,因为这不是 CHAR(1) 的预期值。 (这是一个 CHAR(1) 列,对吗?)

关于mysql - Hibernate、Null 值和 nativeSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2198595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com