Mysql 没有JDBC类型的方言映射:0

Mysql 没有JDBC类型的方言映射:0,mysql,spring,hibernate,Mysql,Spring,Hibernate,如果我在hibernate中运行如下查询: sessionFactory.getCurrentSession().createSQLQuery("select 'test' from dual where 1=2").list() sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list() 我正确地得到了size=(0) 但是,当我运行如下hibernate查询时: s

如果我在hibernate中运行如下查询:

sessionFactory.getCurrentSession().createSQLQuery("select 'test' from dual where 1=2").list()
sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list()
我正确地得到了
size=(0)

但是,当我运行如下hibernate查询时:

sessionFactory.getCurrentSession().createSQLQuery("select 'test' from dual where 1=2").list()
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>
org.hibernate.dialogue.mysqldialogue
试试:

org.hibernate.dialogue.mysql5dialogue
试试:

org.hibernate.dialogue.mysql5dialogue

我深入研究了一些意大利面代码,这些代码是支持多个数据库和多种方言所必需的,我不想弄乱它们(MySql、Oracle、MS SqlServer)。代码也在执行本机sql。我成功地更换了以下部件:

按需选择null_字段,从栏中选择foo

选择“”作为必填字段,从栏中选择foo

这是一次黑客攻击,但成功了

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


我深入研究了一些意大利面代码,这些代码是支持多个数据库和多种方言所必需的,我不想弄乱它们(MySql、Oracle、MS SqlServer)。代码也在执行本机sql。我成功地更换了以下部件:

按需选择null_字段,从栏中选择foo

选择“”作为必填字段,从栏中选择foo

这是一次黑客攻击,但成功了

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


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

sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list()
字段与任何表都不相关,并且始终设置为null。 Hibernate依赖resultset元数据来构造答案。。。在本例中,元数据返回值为0的java.sql.SQLType,因为数据库不知道数据的类型

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

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

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

sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list()
字段与任何表都不相关,并且始终设置为null。 Hibernate依赖resultset元数据来构造答案。。。在本例中,元数据返回值为0的java.sql.SQLType,因为数据库不知道数据的类型

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

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

我试过了,但还是犯了同样的错误。我还尝试创建自己的方言来扩展mysqldialogue,并添加registerHibernateType(Types.NULL,“NULL”);registerColumnType(Types.NULL,“NULL”);但这两种方法都不管用。还有其他建议吗?试试hibernate.dialogue而不是同样的错误,但是我很感激你花时间。我试过了,但还是出现了同样的错误。我还尝试创建自己的方言来扩展mysqldialogue,并添加registerHibernateType(Types.NULL,“NULL”);registerColumnType(Types.NULL,“NULL”);但这两种方法都不管用。还有其他建议吗?请尝试
hibernate.dialogue
而不是
dialogue
同样的错误,但我非常感谢您至少抽出时间。选择“”而不是选择null对我有效。谢谢选择“”而不是选择null对我有效。谢谢这对我有用。谢谢你的解释这对我很有用。谢谢你的解释