我有一个与我的文件系统链接的实体,如下所示:
@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删除操作?
答案 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
}