2011-08-25 77 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