Pergunta

Eu tenho uma relação muitos entre duas tabelas.Muitas tabela contém uma coluna clob.A coluna clob parecido com este no hibernate:

@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;

Então, basicamente, eu posso ter uma Nota com algumas subsitutions, dizer "foo" e "fizzbuzz".Então, na minha mesa principal, eu poderia ter uma Nota com 4 de identificação e, na minha NOTE_JOIN_TABLE Eu teria duas linhas, "foo" e "fizzbuzz" que ambos têm uma relação com a Nota.

No entanto, quando um destes é inserido no DB a maior substituição de valores de são cortadas para ser tão longo como o mais curto. Portanto, neste caso eu teria "foo" e "fiz" no DB em vez de "foo" e "fizzbuzz".

Você tem alguma idéia de por que isso está acontecendo?Tenho verificado e confirmado que eles não estão sendo cortadas em qualquer lugar em nosso código, é definitivamente o modo de hibernação.

Foi útil?

Solução

Muitos drivers JDBC, as primeiras versões do Oracle, em particular, têm problemas ao inserir LOBs.Você certifique-se de que a consulta Hibernate incêndios, com os mesmos parâmetros vinculados funciona com êxito no seu driver JDBC?

Outras dicas

LOB/CLOB coluna pode não ser grande o suficiente.O Hibernate tem algum padrão de tamanhos de coluna para LOB/CLOB que são relativamente pequenos (pode depender db).De qualquer maneira, tente algo como isso:

@Lob 
@Column(length=2147483648)

Ajuste o comprimento (em bytes) de acordo com suas necessidades.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top