我需要使用hibernate模式执行SQL查询(无映射),但是只要字段在MYSQL中具有TEXT数据类型,我都会不断收到此错误:
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
我不知道该怎么办,映射不是一种选择(数据库中的动态表,因此字段数是可变的)。
这是一段代码:
SQLQuery query = session.createSQLQuery(sql); Object[] values = (Object[]) query.uniqueResult();
sql是一个包含查询的字符串(使用mysql查询引擎可以正常运行)。如果我将TEXT数据类型更改为varchar,则可以正常工作,但这不是一个选择!
有什么线索吗?
这是一个可能的解决方案:
package iam.dirty; import java.sql.Types; import org.hibernate.Hibernate; import org.hibernate.dialect.SQLServerDialect; public class DialectForGkoloc extends SQLServerDialect { public DialectForGkoloc() { super(); registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName()); registerHibernateType(-1, Hibernate.STRING.getName()); registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName()); } }
修改Hibernate配置文件hibernate.cfg.xml:
<property name="dialect"> org.hibernate.dialect.SQLServerDialect </property>
与:
<property name="dialect"> iam.dirty.DialectForGkoloc </property>