我上传的文件莫名的没了?都是hibernate注解惹的祸

我做了一个功能,是上传文件到服务器。在数据表中存储服务器文件的路径。
用的是Spring + SpringMVC + Hibernate

流程是这样的,
1、查询当前表中是否保存过路径
2、判断当前是否有文件
3、如果有文件就先上传,上传成功后删除之前文件,删除失败则保留原先
4、如果没有就直接写入
5、保存

逻辑上没有什么问题,我也就这么操作了。但是就遇到一个很坑的事情,每次上传保存后,数据库存储了文件的路径,但是服务器上的文件竟然没有!
通过断点发现,在update之前,文件已经成功上传到服务器了,在执行update 操作后,服务器的文件没了!

很诡异

我还怀疑是Hibernate框架搞的鬼,查看了半天源码,没有发现什么问题。

后来,我去看实体类,这一看,发现了问题。

在这里插入图片描述
在这里插入图片描述
首先,我看着逻辑上也对。
每次设置的时候检查一下之前有没有存在的文件,如果有的话就先把旧的删除掉。
第二个删除前处理也对,在删除前先把文件给删掉。

但是,坑就坑在这里!

@PreRemove

我执行的merge操作更新记录,竟然也触发了@PreRemove方法!!!
这就导致,我更新前都会把这里的文件删掉!!!

真的是心情极不美丽,说好的删除前处理呢!这可是更新操作。

原因没有继续进一步深究,为什么会触发这个事件,不过这个坑我先记一下,日后在研究

发布了97 篇原创文章 · 获赞 46 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/u013513053/article/details/88822187