Hibernate 查询数据为何和数据库不一致?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate 查询数据为何和数据库不一致?相关的知识,希望对你有一定的参考价值。

通过Hibernate查询出某条数据,但是我直接从数据库改了该数据,然后刷新原来页面,仍然显示原来旧的数据,只有重新启动Tomcat才能显示新的数据,请问为什么?

参考技术A hibernate自身的缓存问题,查询数据时hibernate将查询出的数据保存起来,当你的第二次查询语句与上次的一样,hibernate就不会去数据库中查询,而是直接把保存的数据拿出来用,所以就导致了查询结果与数据库不一致的问题。解决办法是不用缓存

为何df和du看到的空间占用大小不一致

df 和du 的工作原理

  • du的工作原理
    du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。
  • df的工作原理
    df命令使用的事statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。

du和df不一致情况模拟

常见的df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统 目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。

以上是关于Hibernate 查询数据为何和数据库不一致?的主要内容,如果未能解决你的问题,请参考以下文章

java hibernate注解映射类的字段可以和数据库中的字段不一致吗

springboot官方为何不支持mybatis,而选择底层为hibernate的JPA?

hibernate缓存(一级缓存二级缓存)

使用jdbc更新数据后,hibernate 缓存对象不更新,与数据库不一致,同一个session中

mybatis为何不像hibernate一样有 Transaction.begin() 只有commit 和rollback

为何df和du看到的空间占用大小不一致