spring 从数据库删除实体时从本地磁盘删除照片

iih3973s  于 2022-11-28  发布在  Spring
关注(0)|答案(1)|浏览(265)

我有一个用户-一个频道关系(@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)频道有一个头像,它存储在本地驱动器上,数据库存储照片的路径。在删除频道时,从本地驱动器删除文件的最佳位置是哪里以及如何?在外观中,如果数据库包含实体且文件夹与之对应,以及如果文件夹存在但实体不存在,则每天维护或检查一次,然后将其删除?
此刻,我删除只是与entityManager,但它不会从本地驱动器删除照片
repository.deleteById(id);
我很抱歉,如果我没有正确地表达这个问题,我只是没有很有经验,在它和我试图描述的问题尽可能详细。

vyswwuz2

vyswwuz21#

您可以在服务层上执行此操作,但请考虑以下几点:

  • 首先删除实体,然后删除照片的操作
  • 这两个操作(删除实体,删除照片)都在同一个事务中,可能在您的服务方法中标记为@Transactional。这样,如果发生意外,数据库操作将回滚,您可以稍后重试。

提到的另一个解决方案,在应用程序中安排一个作业,定期检查文件夹中的照片,并删除任何未使用的照片,听起来也不错,但在这种情况下,请仔细考虑以下几点

  • 这必须是同步的,因为我怀疑你已经有了另一个过程来插入照片到系统中。这个过程在逻辑上首先将照片保存到光盘中,然后创建实体。如果这两个过程碰巧同时发生,你就有了删除照片的风险,因为照片是要用于新用户的,而实体还没有创建。因此,您有风险,确定照片要删除时,实际上它还没有作为实体持久化.

相关问题