奇怪的hibernate createSQLQuery返回一个CHAR | Character但是String

时间:2011-06-15 10:06:58

标签: java hibernate

我正在使用hibernate createSQLQuery,但它只返回第一个char。

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

我正在使用:

  • Mysql
  • hibernate 3.2

快照:

enter image description here

我用Google搜索了stackoverflowforum.hibernateatlassian

UPDATE:我还检查了所有的hibernate查询日志,甚至mysql查询日志都是一样的。

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

3 个答案:

答案 0 :(得分:6)

您是否尝试过将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();

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

  

select convert(varchar, Name) from Person

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