Grails控制器在更改数据库时不刷新缓存

时间:2017-10-23 19:10:44

标签: caching grails gorm

我开始研究使用Spring和Hibernate的Grails项目。当我使用以下代码更改数据库中的条目时会出现问题

class AlarmsController implements UserAware {
    def saveAlarm() {
        def user = DeviceUser.findById(id)
        user.field = value
        user.save(failOnError: true, flush: true)

        render serialize(user) as JSON <%-- not relevant --%>
    }
}

其中fieldidvalue是我不存在且不重要的一些变量。事物被保存在数据库表DeviceUser中,我可以通过手动连接到数据库并执行SELECT语句来检查。现在问题出现了,当我访问映射到方法localhost:8080/api/devices/1234的{​​{1}}时:

show(id)

结果不会刷新(也是在执行硬刷新后,即class DeviceUserController implements UserAware { def show(id) { def deviceUser = DeviceUser.where({ id = id, device = device }).get() render serialize(deviceUser) as JSON } } )。我认为内容正在缓存,确实如此,但是当我搜索问题时,CTRL + F5应该阻止在下次调用时获取缓存的内容。

flush: true是一种将serialize(content)转换为JSON映射的类方法。

我尝试了content之类的不同内容,但没有任何效果。我还尝试将evict(DeviceUser)设置为user.field后重新启动计算机(0 localhost:8080/api/devices/1234始终显示为设置为user.field),但它仍然执行了不更改(值仍为1,但在数据库中为1)。

1 个答案:

答案 0 :(得分:0)

问题已经解决了。看评论。问题不在缓存中,而是在从数据库打印整个表后成功调试的一些奇怪的数据库布局中。