2011-08-25 44 views
1

我需要执行与休眠(没有映射)的SQL查询TEXT数据类型的问题,但我不断收到此错误,每当现场有MYSQL文本数据类型:Hibernate的SQL查询语句,在MySQL的

org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 

我不知道该怎么做,映射不是一个选项(数据库中的动态表,所以字段数是可变的)。

这里是一段代码:

SQLQuery query = session.createSQLQuery(sql); 

Object[] values = (Object[]) query.uniqueResult(); 

SQL是包含查询(它运行确定与MySQL查询引擎)的字符串。如果我将TEXT数据类型更改为varchar,工作正常,但这也不是一种选择!

任何线索?

回答

1

这里是一个可能的解决方案:

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> 
+0

Excelent!将尝试! – gkoloc

+0

它的工作!我必须做的唯一改变是删除Hibernate.xxxxx.getName(),并添加一个简单的字符串。例如: 'registerHibernateType(Types.LONGVARCHAR,“text”);' – gkoloc

0

一个快速的谷歌(你没有尝试这第一,对不对?)建议addScalar是你的朋友在这里。

+0

是的,当然,我想谷歌和addScalar。问题是字段名称也是可变的。 表名是可变的,字段名是可变的,字段数也是可变的。 假设类似于: table_x与field_1,field_2,field_3。 table_y with field_1,field_2 table_z with field_1,field_2,field_3,field_4,field_5 – gkoloc