2016-06-11 13 views
0

Ich verwende eine Vaadin-Upload-Komponente und bisher konnte ich ein Bild in ein Verzeichnis hochladen und es in einer Panel-Komponente anzeigen, nachdem es erfolgreich hochgeladen wurde. Was ich danach machen möchte, ist es auch in die Datenbank einzufügen. Was ich habe, ist eine Tabelle namens Show, die einen Namen, ein Datum und ein Bild hat. In der Show-Klasse habe ich versucht, mein Bild als Byte-Array oder als Blob zu haben.Vaadin Bild hochladen und in der Datenbank speichern

Column(name="image") 
private byte[] image; 

@Lob 
@Column(name="image") 
private Blob image; 

Im Upload succeded Methode möchte ich die Datei in ein Byte-Array konvertieren, und bisher habe ich versucht, dies:

File file = new File("C:\\Users\\Cristina_PC\\Desktop\\" + event.getFilename()); 
byte[] bFile = new byte[(int) file.length()]; 
try { 
    FileInputStream fileInputStream = new FileInputStream(file); 
    fileInputStream.read(bFile); 
    uIP.uploadImage(bFile); 
    fileInputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Ich habe auch versucht dies:

byte[] data = Files.readAllBytes(new File("C:\\Users\\Cristina_PC\\Desktop\\" + event.getFilename()).toPath()); 
uIP.uploadImage(data); 

UIP es ist eigentlich mein UploadImagePresenter, wo ich versuchte, das Byte-Array zu Blob zu transformieren, oder einfach an das Repository als Byte-Array übergeben

public void uploadImage(byte[] data) throws SerialException, SQLException{ 
    //Blob blob = new javax.sql.rowset.serial.SerialBlob(data); 
    showRepo.updateAfterImage(show, data);   // or (show, blob) 
} 

In meinem Repository, in meiner updateAfterImage Methode, die ich habe:

public void updateAfterImage(Show show, byte[] data)    //or Blob data 
{ 
    em.getTransaction().begin();      //em - EntityManager 
    show.setImage(data); 
    em.getTransaction().commit(); 
} 

Entweder mit Blob oder einem Byte-Array, kann ich nicht, indem ihr Bild die bestehende Show zu aktualisieren verwalten und es in der Aktualisierung Datenbank (die Zelle bleibt NULL). Auch bekomme ich keinen Fehler, um mir zu helfen herauszufinden, was falsch läuft. Jede Hilfe/Beratung wäre nützlich. Vielen Dank!

Antwort

0

Ich habe die Lösung gefunden. Was es funktionierte, war:

in meiner updateAfterImage-Methode im Show-Repository.

+0

Die Zusammenführung ist sinnlos, ein Blob-Feld zu aktualisieren (nicht, dass Sie zeigen, was ein "spectacol" ist) ... sobald das Objekt verwaltet (abgerufen von find) wird es im Datenspeicher bei flush/commit mit no aktualisiert andere Anrufe benötigt –

+0

Es tut mir leid, Spectacol bedeutet Show in meiner Sprache, ich habe vergessen, es zu übersetzen, bevor ich die Antwort geschrieben habe. Danke für die Information! –