zoukankan      html  css  js  c++  java
  • Fluently NHibernate 插入CLOB字段

    ORA-01461: can bind a LONG value only for insert into a LONG column

    插入oracle某表时报的错。

    查来查去,是插入的某个字段值超长。怎么会超长呢?一个CLOB类型的字段,号称有4G容量的。

    表设计:
    这里写图片描述

    我用的是Fluently NHibernate,for .net。实体类及映射如下:

        public class CatchResultContent
        {
            public virtual int CatchResultContentId { get; set; }
            public virtual int CatchResultId { get; set; }
            public virtual string Content { get; set; }
        }
        public CatchResultContentMap()
        {
            Table("CatchResultContent"); 
            Id(s => s.CatchResultContentId).GeneratedBy.Sequence("SEQ_CatchResultContent"); 
            Map(s => s.CatchResultId);
            Map(s => s.Content);
        }

    真正到数据库执行的是如下语句:

    INSERT INTO CatchResultContent (CatchResultId, Content, CatchResultContentId) VALUES (?,?,?);

    可能是这条SQL语句中,Content作为字符串输入,整条SQL超过4000,所以超长了?不清楚。

    后来是酱紫搞定的。关键在映射这里:

        public CatchResultContentMap()
        {
    。。。
            Map(s => s.Content).CustomSqlType("Clob").CustomType("StringClob");
        }

    有老外给出的资料说是这样:

    Map(s => s.Content).CustomSqlType("Clob");

    其实还不够的。

    =======================================
    以上答案,似乎只能在 FluentNHibernate 1.3 + NHibernate4.0 里受支持,换成FluentNHibernate2.0或以上,就无效了,本人还不知道如何解决。

  • 相关阅读:
    求阶乘及其和
    JAVA 字符串题目 以静态方法实现encode()和decode()的调用
    JAVA 类与对象题目5
    JAVA 类与对象题目4
    JAVA 类与对象题目3
    JAVA 类与对象题目2
    JAVA 基础练习题代码
    JAVA 关于值类型和引用类型的区别
    JAVA学习 判断一个字符或字符是否位于另一个字符串的末尾
    JAVA 截取4个随机数字字母的代码
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808702.html
Copyright © 2011-2022 走看看