2017-10-11 3 views
-1

Ich habe ein Unternehmen mit meinem Dateisystem wie folgt verbunden:Entfernen einer Datei auf JPA Waisen löschen

@Entity 
public class MyDocument { 
    @Id 
    private Long documentId; 
    private String fileName; 
    private String filePath; 
    //Then a lot of other fields, getters and setters 
} 

Wenn ich ein Dokument aus meiner Datenbank (mit Orphan-Drug-delete zum Beispiel) löschen, möchte ich entfernen die entsprechende Datei in einer Async-Methode.

Irgendwelche Vorschläge? Gibt es eine Möglichkeit, die JPA-Löschaktion abzufangen?

Antwort

1

Sie sollten den Ereignislebenszyklus für Entitäten nachschlagen, insbesondere preRemove.

Mit Annotation Konfiguration ist so einfach wie

@PreRemove 
public void deleteFile(){ 
    //your async logic 
} 

bearbeiten tun:

@Service 
public class FilerService { 
    @PostRemove 
    @Async 
    void deleteFile(MyDocument document) { 
     Files.deleteIfExists(Paths.get(document.getFilePath())); 
    } 
} 

Und es mit @EntityListeners

@Entity 
@EntityListeners(FilerService.class) 
public class MyDocument { 
    @Id 
    private Long documentId; 
    private String fileName; 
    private String filePath; 
    //Then a lot of other fields, getters and setters 
} 
+0

Dank binden: Sie auch getrennt Service wie das schaffen könnte ! Das habe ich gesucht. Ich habe diesen Interceptor in einem anderen Dienst hinzugefügt: http://www.objectdb.com/java/jpa/persistence/event#Listeners_and_External_Callback_Methods_ –