Al utilizar NHibernate 3.1 con SQL Server y Oracle DBs, necesitamos almacenar una cadena de texto de más de 4000 caracteres. El texto es en realidad XML, pero eso no es importante; solo queremos tratarlo como texto sin formato. Con SQL Server, esto es fácil. Declaramos la columna como NVARCHAR (MAX) y el mapa que de esta manera:Asignación de una cadena de texto larga en Oracle y NHibernate
<property name="MyLongTextValue" length="100000"/>
El uso de la propiedad length dice NHibernate esperar una cadena que puede ser superior a 4.000 caracteres.
Por mi vida, no puedo encontrar la manera de hacer que esto funcione en Oracle 11g. Intenté declarar la columna como XMLTYPE y LONG sin éxito. En el primer caso, terminamos con ORA-01461: puede vincular un valor LONG solo para insertarlo en una columna LONG cuando intente insertar una fila. En el segundo caso, los datos se insertan correctamente pero vuelven como una cadena vacía al realizar consultas.
¿Alguien sabe cómo hacer esto? La respuesta debe ser compatible tanto con SQL Server como con Oracle. Preferiría no tener que escribir extensiones personalizadas como tipos de usuario y subclases de controladores. Gracias.
Debe utilizar NTEXT para el servidor SQL, nvarchar (max) es probable que no manejar más de 4000 caracteres. –
@YavorShahpasov ¿por qué piensas que NVARCHAR (MAX) no manejará más de 4000 caracteres? Los documentos dicen "max indica que el tamaño máximo de almacenamiento es 2^31-1 bytes (2 GB)". Eso debería ser suficiente para 1073741823 caracteres más o menos. – phoog
Fui engañado por el hecho de que permite 1-4000 caracteres. Estás en lo correcto y max permitirá hasta 2GB. –