删除JPA orphan-delete上的文件

时间:2017-10-11 13:29:50

标签: java hibernate jpa-2.0

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

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

如果我从数据库中删除文档(例如使用orphan-delete),我想在Async方法中删除相应的文件。

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

1 个答案:

答案 0 :(得分:1)

您应该查找实体的事件生命周期,特别是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
}