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

Hibernate 删除项后hasMany关联列表中为空,hibernate,grails,gorm,Hibernate,Grails,Gorm,存在以下域对象: class Book { List<Picture> pictures static hasMany = [pictures:Picture] static mapping = { pictures lazy: false, cache: 'nonstrict-read-write' } } 看起来,GORM没有更新关联表中的idx字段。 我不能复制它,但我在生产服务器上得到了几次 在我看来

存在以下域对象:

 class Book {
      List<Picture> pictures
      static hasMany = [pictures:Picture]
      static mapping = {
        pictures lazy: false, cache: 'nonstrict-read-write'
      }
    }
看起来,GORM没有更新关联表中的idx字段。 我不能复制它,但我在生产服务器上得到了几次

在我看来,这可能是二级缓存和并发修改的问题。如何预防

Grails2.4.5
MariaDB

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

subject.removeFromPictures(pic)
subject.save()
你必须打电话

pic.delete()
但如果问题仍然存在,则可以使用GORM事件,以便在类中添加:

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

def beforeValidate(){
checkNulls()
}

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

Ref:

我看起来像个哥尔姆人。GORM gotchas系列中的帖子2和3可能是有用的、非常有趣的文章,但与这个问题无关。根据应用程序的逻辑,我无法删除图片实体。现在我的代码中有了类似方法checkNulls的东西,但它看起来很难看
class Book {
...
...
def beforeUpdate(){
checkNulls()
}

def beforeValidate(){
checkNulls()
}

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