T
tuxedo
Gast
Servus ...
ich hab die Anforderung Dateien in einer mit Slony geclusterten PostgresSQL-DB zu speichern. Als Persistenzschicht kommt Hibernate zum einsatz.
Da Slony nur "bytea" und nicht "oid" BLOBs replizieren kann, muss ich auf den Feldtyp "bytea" setzen.
Soweit ich rausgefunden habe, wird das mit Hibernate auf "byte[]" gemapped.
Die Deklaration dazu war einfach:
Damit wird in der DB die Spalte mit Typ "bytea" angelegt. Soweit so gut.
Speichern kann ich darin mehr oder weniger auch schon.
Problem ist jetzt nur: Was mach ich mit Dateien die größer als der Java zur Verfüpgung stehende Speicher sind? Die kann ich unmöglich komplett in den Speicher als byte[] laden.
Ich muss das ganze also irgendwie streamen, sprich Hibernate den Inputstream der Datei mitgeben, so dass beim "persist()" aufruf am EntityManager der Stream gelesen und dessen Inhalt direkt in die DB geschoben wird.
Nur hab ich keinen Schimmer wie das geht. Google hat mich immer nur zu Beispielen mit "oid" BLOBs gebracht. Da scheint das aber komplett anders zu funktionieren.
Bei reinem JDBC wäre es recht einfach zu lösen. Da komm ich nehazu Problemlos an den Stream ran. Aber da Hibernate alles in sich kapselt steh ich hier vor nem Problem.
Hat jemand nen Tipp für mich?
Gruß
Alex
ich hab die Anforderung Dateien in einer mit Slony geclusterten PostgresSQL-DB zu speichern. Als Persistenzschicht kommt Hibernate zum einsatz.
Da Slony nur "bytea" und nicht "oid" BLOBs replizieren kann, muss ich auf den Feldtyp "bytea" setzen.
Soweit ich rausgefunden habe, wird das mit Hibernate auf "byte[]" gemapped.
Die Deklaration dazu war einfach:
Java:
@Column(name = "entry")
private byte[] mEntry;
Damit wird in der DB die Spalte mit Typ "bytea" angelegt. Soweit so gut.
Speichern kann ich darin mehr oder weniger auch schon.
Problem ist jetzt nur: Was mach ich mit Dateien die größer als der Java zur Verfüpgung stehende Speicher sind? Die kann ich unmöglich komplett in den Speicher als byte[] laden.
Ich muss das ganze also irgendwie streamen, sprich Hibernate den Inputstream der Datei mitgeben, so dass beim "persist()" aufruf am EntityManager der Stream gelesen und dessen Inhalt direkt in die DB geschoben wird.
Nur hab ich keinen Schimmer wie das geht. Google hat mich immer nur zu Beispielen mit "oid" BLOBs gebracht. Da scheint das aber komplett anders zu funktionieren.
Bei reinem JDBC wäre es recht einfach zu lösen. Da komm ich nehazu Problemlos an den Stream ran. Aber da Hibernate alles in sich kapselt steh ich hier vor nem Problem.
Hat jemand nen Tipp für mich?
Gruß
Alex