java-在Hibernate 3.2中没有LONGVARCHAR的映射

我正在使用MySQL 5.1运行Hibernate 3.2.0.在MySQL中更新了group_concat_max_len之后(由于group_concat查询超出了默认值),当执行带有group_concat子句的SQLQuery时,出现以下异常:

“ JDBC类型没有方言映射:-1”

-1是LONGVARCHAR的java.sql.Types值.显然,增加group_concat_max_len值会导致对group_concat的调用返回LONGVARCHAR值.这似乎是此错误的一个实例:

http://opensource.atlassian.com/projects/hibernate/browse/HHH-3892

我猜Hibernate 3.5中有针对此问题的修复程序,但这仍然是开发版本,因此我很犹豫将其投入生产,并且不知道它是否会对我的代码库的其他部分造成问题.我也可以只使用JDBC查询,但是随后我必须用group_concat子句替换SQLQuery的每个实例.

还有其他建议吗?

最佳答案
是的,有两个建议.要么:

>修改Hibernate 3.2.0并进行HHH-3892的更改,即获取Hibernate源,应用r16501r16823r17332的补丁)并自己构建Hibernate.
>或按照HHH-1483中的建议使用自定义方言:

public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect {
    public MySQL5Dialect() {
        super();
        // register additional hibernate types for default use in scalar sqlquery type auto detection
        // http://opensource.atlassian.com/projects/hibernate/browse/HHH-1483
        registerHibernateType(Types.LONGVARCHAR,Hibernate.TEXT.getName());
    }    
}

选项2易于实现和测试(我没有),而选项1更“干净”,但需要做更多工作.就个人而言,我会选择选项#1,因为这是您将在3.5中获得的,因此可以确保无缝升级.

相关文章

在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信...
> [合辑地址:MySQL全面瓦解](https://www.cnblogs.c...
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时...
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括...
navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...