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



我开始开发一个使用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语句来检查它。现在出现的问题是,当我访问映射到方法show(id):的localhost:8080/api/devices/1234

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)是一个将content转换为JSON映射的类方法。


我尝试过不同的东西,比如evict(DeviceUser),但都没用。我还尝试在将user.field设置为0后重新启动计算机(在localhost:8080/api/devices/1234上,user.field总是显示为设置为1),但它仍然没有更改(值仍然是1,尽管在数据库中是0)。

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

最新更新