Pregunta

Tengo una relación de uno a muchos entre dos tablas.La tabla de muchos contiene una columna clob.La columna clob se ve así en hibernación:

@CollectionOfElements(fetch = EAGER)
@JoinTable(name = NOTE_JOIN_TABLE, joinColumns = @JoinColumn(name = "note"))
@Column(name = "substitution")
@IndexColumn(name = "listIndex", base = 0)
@Lob
private List<String> substitutions;

Básicamente, es posible que tenga una nota con algunas sustituciones, digamos "foo" y "fizzbuzz".Entonces en mi tabla principal podría tener una Nota con id 4 y en mi NOTE_JOIN_TABLE Tendría dos filas "foo" y "fizzbuzz" que ambos tienen una relación con la Nota.

Sin embargo, cuando uno de estos se inserta en la base de datos los valores de sustitución más grandes se recortan para que sean tan largos como los más cortos. Entonces en este caso habría "foo" y "fiz" en la base de datos en lugar de "foo" y "fizzbuzz".

¿Tienes alguna idea de por qué sucede esto?Revisé y confirmé que no se están recortando en ninguna parte de nuestro código, definitivamente está en hibernación.

¿Fue útil?

Solución

Muchos controladores JDBC, en particular las primeras versiones de Oracle, tienen problemas al insertar LOB.¿Se aseguró de que la consulta Hibernate se active, con los mismos parámetros vinculados, funcione correctamente en su controlador JDBC?

Otros consejos

LOB/CLOB Es posible que la columna no sea lo suficientemente grande.Hibernate tiene algunos tamaños de columna predeterminados para LOB/CLOB que son relativamente pequeños (pueden depender de la base de datos).De todos modos, prueba algo como esto:

@Lob 
@Column(length=2147483648)

Ajuste la longitud (en bytes) según sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top