JDBC类型没有方言映射:0

时间:2013-02-05 22:48:19

标签: mysql spring hibernate

如果我在hibernate中运行这样的查询:

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

我正确地得到size=(0)

然而,当我运行这样的hibernate查询时:

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

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

如何修复它,以便我得到结果大小=(0)?

而不是错误

*编辑*

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

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

3 个答案:

答案 0 :(得分:0)

尝试:

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

答案 1 :(得分:0)

我深入研究了支持多个数据库和多种方言所需的意大利面条代码,我不想搞砸(MySql,Oracle,MS SqlServer)。代码也在执行本机sql。我能够成功地替换像:

选择null作为required_field,foo from bar;

使用

选择''作为required_field,foo from bar;

这是一个黑客,但它带来了一天。

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

SQLite - No Dialect mapping for JDBC type: 0 (Hibernate)

Sqlite & Hibernate Ex: No Dialect mapping for JDBC type: 0

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

答案 2 :(得分:0)

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

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

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

其中一个解决方法是转换空值:

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