当前位置: 首页 > 知识库问答 >
问题:

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

云锦
2023-03-14

我有一个用户 - 一个通道关系(@OneToOne(级联 = CascadeType.ALL,orphanRemoval = true)频道有一个头像,它存储在本地驱动器上,数据库存储照片的路径。删除通道时,从本地驱动器中删除文件的最佳位置和方式在哪里?在外观、服务或每天检查一次数据库是否包含实体并且文件夹与之对应,如果文件夹存在但实体不存在,则删除它?

目前我只是使用实体管理器删除,但它不会从本地驱动器中删除照片

存储库.deleteById(id)

如果我没有正确表达这个问题,我很抱歉,我只是没有经验,我试图尽可能详细地描述问题。


共有1个答案

籍辰沛
2023-03-14

您可以在服务层执行此操作,但请考虑以下事项:

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

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

  • 这必须同步并仔细完成,因为我怀疑您已经有了另一个在系统中插入照片的过程。另一个过程逻辑上首先将照片保存在光盘中,然后创建实体。如果这两个过程恰好同时发生,那么您就有可能删除将用于新用户且尚未创建实体的照片。因此,当照片实际上还没有作为实体保存时,您就有可能将其识别为要删除的照片
 类似资料:
  • 用于从不存在的VM中删除磁盘的所有在线说明都与旧的Azure UI有关,该UI不包含与新门户相同的菜单命令。因此,我需要使用新的Azure管理门户删除孤立磁盘的说明。旧门户的说明对此操作毫无价值。

  • 我以为上面的办法行得通,但它失败了。我把它放在渲染行部分。它出现了reference.remove失败。第一个参数必须是有效的函数。就像在这些房间里,它有信息,我认为这是我出错的地方,但我不知道如何去做它。谢谢。

  • 我如何删除记录“苹果”(在图片中标记)? 根据文档,要移除一个项,需要对引用调用removeValue()。但要获得引用,我需要子ID。因为它是一个随机生成的id(-kisnx87ayigsh3ilp0d),如何删除它?

  • 我仍在开发我的登录应用程序。此时,用户可以注册、登录和更新配置文件信息。数据存储在firebase实时数据库中,该装置也通过firebase工作。我想添加一个“删除配置文件”按钮,以便从firebase中删除用户信息。我弄清楚了如何从自动认证过程中删除用户。现在我尝试对Uid调用remove()函数,因此现在数据在实时数据库中被删除,但仍在Firebase身份验证中,如果删除userdata,应用

  • 我正试图从数据库中删除一行,但得到以下错误

  • 我有一个jsp网页。我需要删除用户名从数据库当我按删除按钮从网页。我尝试了下面的代码,但是我不能删除名称,而是在用户名数据库中插入一个新行和一个空值。 unblockServlet.java: 受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{//TODO自动生成的方法