0

如果我像这样在休眠中运行查询:

sessionFactory.getCurrentSession().createSQLQuery("select 'test' from dual where 1=2").list()

我正确地得到了size=(0).

但是,当我像这样运行休眠查询时:

sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list()

我收到一条错误消息:“没有 JDBC 类型的方言映射:0”?

我怎样才能修复它,而不是错误我得到结果大小=(0)?

* 编辑 *

我在 hibernate.cfg.xml 中为休眠配置了方言,如下所示:

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
4

3 回答 3

5

我知道这是一个很晚的答案,但如果有人确实有同样的问题:这里的问题是执行查询:

sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list()

字段与任何表都不相关,并且始终设置为空。Hibernate 依赖结果集元数据来构造答案......在这种情况下,元数据返回值为 0 的 java.sql.SQLType,因为数据库不知道数据的类型。

一种解决方法是强制转换空值:

    sessionFactory.getCurrentSession().createSQLQuery("select CAST(null as char) from dual where 1=2").list()
于 2017-07-25T14:47:30.467 回答
1

我深入研究了一些意大利面条代码,这些代码需要支持多个数据库和多种我不想弄乱的方言(MySql、Oracle、MS SqlServer)。该代码也在执行本机 sql。我能够成功替换以下内容:

select null 作为 required_field, foo from bar;

select '' as required_field, foo from bar;

这是一个黑客,但它进行了一天。

这里似乎讨论了更好的解决方案:

SQLite - JDBC 类型没有方言映射:0(休眠)

Sqlite & Hibernate Ex:没有 JDBC 类型的方言映射:0

https://code.google.com/p/hibernate-sqlite/issues/detail?id=3

于 2015-06-05T14:09:46.707 回答
0

尝试:

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
于 2013-02-06T01:42:20.387 回答