有域对象:
class Book { List<Picture> pictures static hasMany = [pictures:Picture] static mapping = { pictures lazy: false, cache: 'nonstrict-read-write' } }
有时,通过代码从列表中删除图片后,它会在图片列表中产生空项。
.. book.refresh() def pic = Picture.get(params.id) subject.removeFromPictures(pic) subject.save()
看起来,GORM不会更新关联表中的idx字段。我无法复制它,但是在生产服务器上却得到了几次
在我看来,这可能是二级缓存和一致修改的问题。怎么预防呢?
Grails 2.4.5 MariaDB
我认为问题可能取决于您在类上设置的级联删除行为。首先,打电话后
subject.removeFromPictures(pic) subject.save()
你必须打电话。
pic.delete()
但是,如果问题仍然存在,则可以使用GORM事件,因此可以在班级中添加:
class Book { ... ... def beforeUpdate(){ checkNulls() } def beforeValidate(){ checkNulls() } def checkNulls(){ pictures?.removeAll(null) }
参考:GORM活动