Grails:使用hibernate获取信息会产生旧数据

时间:2015-08-05 20:56:12

标签: hibernate grails

我正在管理DB(文件夹表)中的文件夹列表。我正在创建文件夹和获取文件夹,每个文件夹存储列表中前一个文件夹的ID(链接列表的种类),因此可以插入文件夹"在"之间两个现有文件夹。所以一个文件夹有一个' id'字段和' prev_folder_id'领域。 ' prev_folder_id'可能是其他现有文件夹的id的零。

添加新文件夹时:

  1. 在DB中创建和存储新文件夹
  2. 更改链接列表中下一个文件夹的prev_folder_id以指向新文件夹。
  3. 正确更改数据库中的数据。但是,我看到的问题是,在获取文件夹列表时,下一个文件夹仍然指向旧的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
    }
    

    我猜这个问题与缓存有关,但所有缓存选项都被禁用。什么可能导致这种行为?

1 个答案:

答案 0 :(得分:0)

我猜它与此有关:

flush.mode = 'auto'

请参阅http://vladmihalcea.com/the-dark-side-of-hibernate-auto-flush/

您可以将其设置为'始终'如果您可以进行一些优化交易以确保一致性。