Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除JPA孤立文件删除_Java_Hibernate_Jpa 2.0 - Fatal编程技术网

Java 删除JPA孤立文件删除

Java 删除JPA孤立文件删除,java,hibernate,jpa-2.0,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 } 如果我从数据库中删除一个文档(例如使用孤立删除),我希望以异步方法删除相应的文件 有

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

@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
}

谢谢这就是我一直在寻找的。我在另一个服务中添加了此拦截器: