如果我在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>
答案 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()