• SSH框架中关于clob字段的处理跟踪


    由一个bug更改而引发的一系列问题。。。

    项目场景:

    在信息导航管理模块中,编辑一条信息内容,此内容字段为clob类型,点击“保存”按钮,后台报错“ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值”。

    一直以为是字段映射hibernate的问题,就从这些映射文件中查找问题,以为是hibernate对clob字段操作的问题,最终发现是sys_log表url字段过长而导致此错误;

    ------------------------------------------------------------------------------------------------

    特此将google中的搜索记录如下:

    1、ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

    检查插入的值是否大于该字段数据类型约束的长 度。

    这个异常是指,用户向数据库执行插入数据操作时,某条数据的某个字段值过长,如果是varchar2类型的,当长度超过2000,--4000(最 大值)之间的时候,oracle会自动将该字段值转为long型的,然后,插入操作失败。解决办法是:将此字段的类型改为clob或者blob类型;

    网络资料链接:http://hi.baidu.com/chengchaos/item/05e3a385167297dfd0f8cd7b

    2、内容字段确认为clob字段,再接着往下想,是不是clob字段在映射类型为String时出错了呢,顺着思路进行查找。

    google搜索“hibernate clob”,查看资料五花八门,大致说hibernate对clob处理的问题,以及跟项目所使用的jar包也有关联,

    也提出了一些解决方案,大部分搜索资料上都提到的方法,就是在hibernate.cfg.xml中添加一行配置:

    <property name="hibernate.connection.SetBigStringTryClob">true</property>

    这样在映射类和映射配置文件中,将clob字段映射为"String"即可,新增和修改时使用的是java.sql.Clob进行这些字段的转换,此功能是否有效,没有实验,且公司框架为ssh集合,思考着此类配置应该已经得到处理,或是Spring配置接管对clob的处理。

    网络资料链接:http://www.360doc.com/content/13/0321/10/9629506_272861105.shtml

    3、当前公司使用框架是应用多年的框架,对于clob字段的使用会有相关配置,于是从新查找ssh 对clob字段的处理。

    框架中使用的Spring对clob类型的处理,详细可参考资料:http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html

    这篇文件讲的非常详细,Spring中已对clob字段的解决方案已进行配置,随后定位发生错误是映射配置文件关于clob的类型配置错误;

    当处理clob类型的字段时,对应实体类成员变量的类型为java.lang.String,映射配置文件的数据库字段类型为org.springframework.orm.hibernate.support.ClobStringType

    另有一篇资料有详细说明:http://blog.csdn.net/ilibaba/article/details/3742367

    顺便说下另外一种数据类型blob所对应实体类的字段为 byte[] , 映射配置文件的数据库字段类型为:org.springframework.orm.hibernate3.support.BlobByteArrayType

    关于二种类型的使用情况:大文本型的字段,大多设置为clob,而对于存储图片、文档等类型文件时应设置为blob

     4、更改完配置,进行debug断点跟踪,发现在记录日志时,也有错误,这个是导致“ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值”的原因。

    原因是在取提交的url时,

    RequestHelper requestHelper=new DefaultRequestHelper(request,response);
    String url=requestHelper.getHref().toString();

    得到的url包括提交所带的参数,包括提交的大字段内容都在里面,所以在往sys_log表中保存时,报了字段超长的错误,至此告一段落。

  • 相关阅读:
    【剑指Offer】34、第一个只出现一次的字符
    【剑指Offer】33、丑数
    【剑指Offer】32、把数组排成最小的数
    linux精彩收集
    shell-总结【摘录】
    linux -特殊符号
    linux --mount
    linux--lsof
    linux--find
    Linux之rsync数据同步服务
  • 原文地址:https://www.cnblogs.com/bingya/p/3121123.html
Copyright © 2020-2023  润新知