小编典典

删除项目后,hasMany关联列表中为空

hibernate

有域对象:

 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


阅读 250

收藏
2020-06-20

共1个答案

小编典典

我认为问题可能取决于您在类上设置的级联删除行为。首先,打电话后

subject.removeFromPictures(pic)
subject.save()

你必须打电话。

pic.delete()

但是,如果问题仍然存在,则可以使用GORM事件,因此可以在班级中添加:

class Book {
...
...
def beforeUpdate(){
checkNulls()
}

def beforeValidate(){
checkNulls()
}

def checkNulls(){
pictures?.removeAll(null)
}

参考:GORM活动

2020-06-20