【问题标题】:Oracle NVARCHAR2(Max) using nhibernate 2.1使用 nhibernate 2.1 的 Oracle NVARCHAR2(Max)
【发布时间】:2012-03-23 07:22:42
【问题描述】:

这是我的问题:我有 Oracle 数据库 10g,我使用 nhibernete 2.1 进行映射。现在,当我在 oracle 中创建表时,我的表的 hbm.xml 文件是这样的

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="AssembleName" namespace="NamesapceName" >
<class name="ClassName" table="TableName" schema="ScheamName"
     dynamic-update="true"  dynamic-insert="true"  select-before-update="true">
<id name="Id" column="id" type="integer" unsaved-value="0">
  <generator class="native"></generator>
</id>
<property name="Name" column="name" type="StringClob" length="100000" not-null="true" />
  </class>

如果我给出的属性长度大于 4000,它会以这种格式创建

create table TableName (
    id NUMBER(10,0) not null,
   name NCLOB not null, 
   primary key (id)
)

当我使用自己的函数获取表格项目时
我遇到 Oracle.DataAccess.Client.OracleException:ORA-00932:不一致的数据类型:预期 - 遇到 NCLOB 问题 但是当我将属性设置为

<property name="Name" column="name" type="string" length="2000" not-null="true" />

它以这种格式创建

create table TableName (
    id NUMBER(10,0) not null,
   name NVARCHAR(2000) not null, 
   primary key (id)
)

我获取数据的功能运行良好。但我需要一个字符串长度 > 4000 且没有 Oracle.DataAccess.Client.OracleException: ORA-00932: 不一致的数据类型:预期 - 得到 NCLOB 的表

【问题讨论】:

  • 在 Oracle 中,您不能定义超过 4000 个字节的 (N)VARCHAR 列。对于较大的值,您必须使用 CLOB 或 NCLOB。请向我们展示访问该列的“自己的函数”的代码。

标签: oracle nhibernate


【解决方案1】:

你试过这个吗?

<property name="Name" length="10000" not-null="true" />

我使用的是 SQL Server,在这种情况下我不需要指定类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多