【问题标题】:Reading a class instance from the dB rather than the cache从分贝而不是缓存中读取类实例
【发布时间】:2015-04-03 18:22:26
【问题描述】:

我使用 grails 2.3.3 和 Hibernate 作为后端 dB。

我希望能够直接从 dB 而不是缓存中获取类实例。

例如,在 grails 中访问实例的代码是:

picturesShrInstance = PicturesShr.findByName(file.originalFilename)

我得到的只是缓存版本。

有什么建议吗?

-麦克

【问题讨论】:

  • 为什么会得到缓存版本?我的意思是,如果您之前执行过查询并再次执行它,则数据没有更改,因此可以获取缓存版本(不必转到数据库)。如果您更改了 originalFilename 并保存了该对象,则它在休眠缓存中可用,并且由于您更改了它也是有效的。

标签: hibernate grails caching


【解决方案1】:

你有两个选择。

  1. 禁用休眠缓存。
  2. 在您的域实例上使用 refresh() 方法。

Grails documentationrefresh() 方法描述为:

从底层数据库重新读取给定实例的状态。 不建议使用它来实现长时间运行的会话 跨越许多业务任务。但是这种方法在某些情况下是有用的 特殊情况。

【讨论】:

  • PicturesShr.withNewSession { } 中进行查询可能是另一种选择
  • @JoshuaMoore 谢谢这招:picturesShrInstance.refresh()。在 Web Grails 文档页面上 - 曾经在 RH 底部角落有一个非常有用的搜索栏,现在它已经消失并且非常有用。不确定是浏览器设置还是圣杯网站设置我无意中更改了 - 或者它可能已被删除。可惜如果是这样的话 - 有什么想法吗?
  • 您始终可以使用单页版本的文档和浏览器的搜索功能grails.github.io/grails-doc/latest/guide/single.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多