Java中使用Hhibernate遇到一个错误:No Dialect mapping for JDBC type:1

今天遇到一个错误在使用Hibernate的时候,使用createSQLQuery获取数据。

Query query = getSession().createSQLQuery(String.format("select rulestr,rultype from asr_rule where rulcode='%s'", baseRuleCode));
for (Object item : query.list()) {
 ...
}

在query.list()时就出错了:No Dialect mapping for JDBC type:-1

意思大概是没有与jdbc类型对应的方言。

在数据库中把跟踪到的SQL运行一下,是成功的。根据提示看,rulestr是text类型的,rultype是int类型的,应该不会是rultype的问题,而是rulestr的问题。经过搜索,找到解决方法如下:

1、继承一下MySQLDialect,注册text类型:

public class MySqlDialectEx extends MySQLDialect {
    
public MySqlDialectEx() {
        
super();
        registerHibernateType(Types.LONGVARCHAR, 
"text");
    }
}

2、beans.xml中配置方言为刚才写的MySqlDialectEx.

<property name="hibernateProperties">
    
<props>
        
<prop key="hibernate.show_sql">false</prop>
        
<prop key="hibernate.dialect">org.vsem.MySqlDialectEx</prop>
    
</props>
</property>
原文地址:https://www.cnblogs.com/yvesliao/p/1772679.html