Domanda

Ho una relazione uno a molti tra due tabelle.La tabella many contiene una colonna clob.La colonna clob appare così in ibernazione:

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

Quindi in pratica potrei avere una nota con alcune sostituzioni, diciamo "foo" E "fizzbuzz".Quindi nella mia tabella principale potrei avere una nota con id 4 e in my NOTE_JOIN_TABLE avrei due file "foo" E "fizzbuzz" che entrambi hanno una relazione con la nota.

Quando però uno di questi viene inserito nel DB i valori di sostituzione più grandi vengono ritagliati per essere lunghi quanto il più corto. Quindi in questo caso lo avrei fatto "foo" E "fiz" nel DB invece di "foo" E "fizzbuzz".

Hai qualche idea del perché questo sta accadendo?Ho controllato e confermato che non vengono ritagliati da nessuna parte nel nostro codice, è sicuramente in ibernazione.

È stato utile?

Soluzione

Molti driver JDBC, in particolare le prime versioni di Oracle, presentano problemi durante l'inserimento dei LOB.Ti sei assicurato che la query Hibernate venga attivata, con gli stessi parametri associati, funzioni correttamente nel tuo driver JDBC?

Altri suggerimenti

LOB/CLOB la colonna potrebbe non essere abbastanza grande.Hibernate ha alcune dimensioni di colonna predefinite per LOB/CLOB che sono relativamente piccoli (possono dipendere dal db).Ad ogni modo, prova qualcosa del genere:

@Lob 
@Column(length=2147483648)

Regola la lunghezza (in byte) in base alle tue esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top