【问题标题】:Hibernate SQL QUERY, problem with TEXT data type in mysqlHibernate SQL QUERY,mysql中TEXT数据类型的问题
【发布时间】:2011-11-03 18:22:57
【问题描述】:

我需要使用休眠(无映射)执行 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,可以正常工作,但这也不是一个选项!

有什么线索吗?

【问题讨论】:

    标签: mysql sql hibernate


    【解决方案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>
    

    【讨论】:

    • 成功了!我必须做的唯一更改是删除 Hibernate.xxxxx.getName(),并添加一个简单的字符串。例如:registerHibernateType(Types.LONGVARCHAR, "text");
    【解决方案2】:

    快速谷歌(您确实先尝试过,对吗?)建议 addScalar 是您的朋友。

    【讨论】:

    • 是的,当然,我尝试了 google 和 addScalar。问题是字段名称也是可变的。表名是可变的,字段名是可变的,字段数也是可变的。假设类似:table_x 与 field_1、field_2、field_3。 table_y 与 field_1,field_2 table_z 与 field_1,field_2,field_3,field_4,field_5
    猜你喜欢
    • 2011-05-20
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多