我开始开发一个使用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 --%>
}
}
其中field
、id
和value
是我不存在并且不重要的一些变量。这个东西保存在数据库表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
)。
问题已经解决。请参阅评论。问题不在缓存中,而是在某些奇怪的数据库布局中,这些布局在从数据库打印整个表后被成功调试。