Ich nutze die LOB-Annotation um binäre Daten zu persistieren und habe 2 Alternativen:
1: byte[]
Code:
private byte[] data;
@Lob
@Column(name = "DATA", length = 2147483647)
@Basic(fetch = FetchType.LAZY)
//getter/setter
2. java.sql.BLOB:
Code:
private Blob data;
@Lob
@Column(name = "DATA")
//getter/setter
Alternative 1 funktioniert nur dann, wenn ich die Länge z.B. auf
length = 214748 verkürze. Geb ich jedoch den maximalen Integer-Wert an, so scheitert es bereits bei der Erstellung der Tabelle:
Code:
Unsuccessful: create table MYDATAS (ID_DATA integer not null, DATA blob(2147483646), primary key (ID_DATA), unique (ID_DATA))
09:57:16,546 ERROR [SchemaExport] DB2 SQL Error: SQLCODE=-355, SQLSTATE=42993, SQLERRMC=DATA, DRIVER=3.50.152
09:57:16,750 ERROR [SchemaExport] Unsuccessful: create index IDX_ID_DATA on MYDATAS (ID_DATA)
09:57:16,750 ERROR [SchemaExport] DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=MYDATAS , DRIVER=3.50.152
Jedoch will ich die maximale Länge für mein byte-Array ausnutzen.
Ich nutze DB2 und die maximale Länge für BLOB's sind 2GB (d.h. 2147483646 wäre eigentlich erlaubt).
Gebe ich keine length an, so erstellt Hibernate per default mein Blob-Feld mit einer Länge von 255 (viel zu wenig!). Wie kann ich das lösen?
Oder sollte ich doch besser gleich Alternative 2 nutzen?