java – 想要使用hibernate查询中的事务从表中的文件夹和数据库
发布时间:2020-12-15 02:11:39 所属栏目:Java 来源:网络整理
导读:我有一个文件上传的应用程序.上传文件后,新创建文档路径,文档保存在文件路径中.同时文档路径和相关值保存在数据库表中.在我的应用程序中上传后,有一个删除不需要的文件的按钮.有时文件删除操作不正常工作.因此会出现内存浪费.我想通过使用交易声明来避免这种
我有一个文件上传的应用程序.上传文件后,新创建文档路径,文档保存在文件路径中.同时文档路径和相关值保存在数据库表中.在我的应用程序中上传后,有一个删除不需要的文件的按钮.有时文件删除操作不正常工作.因此会出现内存浪费.我想通过使用交易声明来避免这种情况.我不知道如何将hibernate事务用于我的工作.这可能吗?请帮我成功完成工作(我使用
spring与hibernate集成和postgresql)
谢谢 在控制器中 int supDocId=1102; String docPath=D:/; String filePath=docPath+supDocId+".pdf"; File file=new File(filePath); boolean isDelete = servicesService.deleteDocument(supDocId); if(isDelete) { if(file.exists()) { file.delete(); } alertMsg = "The file is deleted sucessfully"; } else{ alertMsg = "Deletion Failed.!!! File is under processing.."; } 在服务类 public boolean deleteDocument(int supDocId){ return servicesDAO.deleteDocument(supDocId); } 在servicesDAO类 public boolean deleteDocument(int supDocId){ int deleteStatus=0; try { String deleteQuery = "DELETE FROM tablename WHERE attch_doc_id='"+supDocId+"'"; Query deleteQ = session.createSQLQuery(deleteQuery); deleteStatus = deleteQ.executeUpdate(); if(deleteStatus>0){ return deleteStatus; } } catch (Exception e) { e.printStackTrace(); } return deleteStatus; } 我想使用事务语句在DAO类中处理两个操作(文档和数据库值删除). 解决方法
如果数据库事务失败 – 您不仅会遇到已删除文件的问题,还会对上传的新文件产生问题.
在大多数情况下,文件系统不支持事务,因此我不认为使用XA(使用JTA的分布式事务)或类似方法可以实现防弹解决方案. 我在一些项目中使用的相当直接的解决方案: >文件系统中的文件是在数据库提交之前创建的(但最好是在hibernate刷新之后). 如果您有大量文件,则可能需要进行一些优化以防止始终扫描所有文件.例如: >将新文件放入名为“当前日期”的文件夹中,因此只能检查部分文件是否包含上传新文件的不成功事务.>在文件删除操作中,参考应删除的文件,将新记录插入表“deleted_files”.>创建异步进程以定期扫描表“deleted_files”,删除物理文件,如果删除成功(或文件已经丢失),则从表“deleted_files”中删除记录并提交事务. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |