删除项目后 hasMany 关联列表中为空
Null in hasMany assosiation list after removing item
有域对象:
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 字段 table。
我无法重现它,但我在生产服务器上得到了几次
个人认为可能是二级缓存和并发修改的问题。如何预防?
Grails 2.4.5
MariaDB
我认为问题可能取决于您在 class 上设置的级联删除行为。
首先,在调用
subject.removeFromPictures(pic)
subject.save()
你必须打电话。
pic.delete()
但如果问题仍然存在,您可以使用 GORM 事件,这样您可以在 class 中添加:
class Book {
...
...
def beforeUpdate(){
checkNulls()
}
def beforeValidate(){
checkNulls()
}
def checkNulls(){
pictures?.removeAll(null)
}
参考:GORM Events
有域对象:
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 字段 table。 我无法重现它,但我在生产服务器上得到了几次
个人认为可能是二级缓存和并发修改的问题。如何预防?
Grails 2.4.5 MariaDB
我认为问题可能取决于您在 class 上设置的级联删除行为。 首先,在调用
subject.removeFromPictures(pic)
subject.save()
你必须打电话。
pic.delete()
但如果问题仍然存在,您可以使用 GORM 事件,这样您可以在 class 中添加:
class Book {
...
...
def beforeUpdate(){
checkNulls()
}
def beforeValidate(){
checkNulls()
}
def checkNulls(){
pictures?.removeAll(null)
}
参考:GORM Events