java - hibernate 不一致

标签 java mysql hibernate

我正在使用 Hibernate 和 MySql,当我启动本地服务器并传递查询时,返回的值是一致且正确的。如果我通过 updateQuery 或通过打开 MySql 工作台手动更新数据库,则选择查询有时会返回旧值,有时会返回新值。这是一个已知的问题?我确保在每次选择调用之前以及任何插入/更新事务之前都有一个 beginTransaction 和 commitTransaction 。有趣的是,直到我重新启动后接触数据库,返回的值都是完美的。

最佳答案

请在禁用 Hibernate 缓存(二级缓存查询缓存)的情况下再次尝试相同的操作。为此,请在 Hibernate 或 Spring 配置中将以下属性设置为 false:

  • hibernate.cache.use_query_cache
  • hibernate.cache.use_second_level_cache

这应该导致 Hibernate 每次都返回到数据库,并且应该显示数据库中的结果。请注意,Hibernate 仍然使用第一级 session 缓存,该缓存在 session (通常是一个事务)的生命周期内使用。除此之外,它现在应该始终访问数据库,并且即使您直接在数据库中更改数据,也应该显示最新的结果。

一旦确定其有效,您可以再次启用缓存并检查它们是否按设计工作。请确保交叉阅读有关缓存的 Hibernate 文档,尤其是各种缓存策略(只读读写、...): http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-cache

关于java - hibernate 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919443/

相关文章:

java - 如何告诉 Eclipse 工作区?

java - 使用 JTattoo 外观时如何更改 JTable 标题字体

php - 如何通过与 eloquent Laravel 5.2 的连接从表中返回最高的 id 值

mysql - 使用 @SqlDelete 的 JPA 软删除会导致 SQL 错误 : Parameter index out of range (2 > number of parameters,,即 1)

java - 如何使用 hibernate createSQLQuery 获取整数值?

java - 如何将光栅转换为渲染图像

java - 如何解密文件并将其添加到字符串列表中

mysql - SQL请求,同一张表上的内部连接?

java - 在 Spring MVC 应用程序中查找内存泄漏

java - session.getTransaction().commit() 是否在 hibernate 中关闭 session ?