【问题标题】:strange hibernate createSQLQuery returns a CHAR|Character but String奇怪的休眠 createSQLQuery 返回一个 CHAR|Character 但 String
【发布时间】:2011-09-15 09:52:09
【问题描述】:

我正在使用休眠createSQLQuery,但它只返回第一个字符。

tableName = 'select code, name from airports where excludeFromSearch = 0 order by name';
s.createSQLQuery(tableName).list();

我正在使用:

  • Mysql
  • 休眠 3.2

快照:

我用谷歌搜索了stackoverflow,forum.hibernate,atlassian

更新:我还检查了所有休眠查询日志,甚至 mysql 查询日志都相同。

`code char(3)`  // <strike>might</strike> must cause problem as in screen shot
name varchar(100)

【问题讨论】:

标签: java hibernate


【解决方案1】:

首先,尝试在数据库上触发由 hibernate 生成的查询,然后尝试匹配结果。如果对数据库的查询也返回相同的结果,请检查您的表定义,代码实际上是字符串或其他内容。

将查询写入 SQL 查询的更好选择是将它们写入 hbm 文件中,然后在其中定义返回属性,这将对您有很大帮助,因为您将能够将输出转换为所需的对象,而不是对象数组。

【讨论】:

    【解决方案2】:

    您是否尝试将 Scalar 设置为您的请求?

    StringType stringTypeInstance = StringType.class.newInstance();
    
    String tableName = 'select code, name from airports where excludeFromSearch = 0 order by name';
    
    List<Object[]> result = s.createSQLQuery(tableName)
        .addScalar("code",stringTypeInstance)
        .addScalar("name",stringTypeInstance )
        .list();
    

    【讨论】:

      【解决方案3】:

      您可以在 SQL 语句中进行简单的转换。

      select convert(varchar, Name) from Person

      当 char 自动装配到 Character 列值时,旧版本的 Hibernate 中存在问题。 https://hibernate.atlassian.net/browse/HHH-2304

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-27
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        • 2012-08-06
        • 1970-01-01
        相关资源
        最近更新 更多