在 JPA orphan-delete 上删除文件

Remove a file on JPA orphan-delete

我有一个与我的文件系统链接的实体,如下所示:

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

如果我从我的数据库中删除一个文档(例如使用孤立删除),我想在异步方法中删除相应的文件。

有什么建议吗?有没有办法拦截 JPA 删除操作?

您应该查找实体的事件生命周期,特别是 preRemove。

注解配置一样简单

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

编辑:您也可以像这样创建一个单独的服务:

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

并绑定@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
}