【问题标题】:Grails: getting info using hibernate results in old dataGrails:使用休眠获取信息会导致旧数据
【发布时间】:2015-08-05 20:56:11
【问题描述】:

我正在管理数据库(文件夹表)中的文件夹列表。我正在创建文件夹并获取文件夹,每个文件夹都将前一个文件夹的 id 存储在列表中(类似于链表),因此可以在两个现有文件夹“之间”插入一个文件夹。所以一个文件夹有一个“id”字段和一个“prev_folder_id”字段。 'prev_folder_id' 可能是其他现有文件夹的 id 为零。

添加新文件夹时:

  1. 在 DB 中创建和存储新文件夹
  2. 将链表中下一个文件夹的 prev_folder_id 更改为指向新文件夹。

数据库中的数据已正确更改。但是,我看到的问题是,在获取文件夹列表时,下一个文件夹仍然指向旧的 prev_folder_id 而不是新的。如果我多次触发相同的获取请求,我有时会得到旧信息,有时会得到新的正确信息。

以下是我在DataSource.groovy中的hibernate配置:

hibernate {
    cache.use_second_level_cache = false
    cache.use_query_cache = false
//    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
    singleSession = true // configure OSIV singleSession mode
    flush.mode = 'auto' // OSIV session flush mode outside of transactional context

    format_sql = false
    use_sql_comments = true
}

我猜问题出在缓存上,但是所有缓存选项都被禁用了。什么可能导致这种行为?

【问题讨论】:

    标签: hibernate grails


    【解决方案1】:

    我猜这与此有关:

    flush.mode = 'auto'
    

    见http://vladmihalcea.com/the-dark-side-of-hibernate-auto-flush/

    如果您愿意通过一些优化来换取一致性,您可以将其设置为“始终”。

    【讨论】:

    • 我将刷新模式更改为始终,但问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2018-08-28
    • 2012-08-15
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多