zoukankan      html  css  js  c++  java
  • 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表中保存时,报了字段超长的错误,至此告一段落。

  • 相关阅读:
    oracle 静默安装
    浅析hybrid模式下地支付宝钱包和微信
    LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
    hdu 5411 CRB and Puzzle 矩阵高速幂
    Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
    实现Android4.4系统设置分页滑动浏览功能
    oracle 数据库中数据导出到excel
    Nginx配置upstream实现负载均衡
    公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?
    图片在内存中的占用的空间大小
  • 原文地址:https://www.cnblogs.com/bingya/p/3121123.html
Copyright © 2011-2022 走看看