4

我有一个这样的域类:

 class Domain {
   String a
   int b
   String c
  ...


def afterInsert(){
       def anotherDomain = new AnotherDomain()
         anotherDomain.x=1
         anotherDomain.y=2

        if(anotherDomain.save()){
            println("OK")
         }else{
              println("ERROR")
          }

     }
  }

它打印“OK”,我什至可以打印 anotherDomain 对象,一切似乎都正常,没有错误,什么都没有,但是 anotherDomain 对象不会保留在数据库中

4

2 回答 2

8

除非您尝试保存域,否则您无法将域持久保存到数据库中withNewSession

def beforeInsert(){
   def anotherDomain = new AnotherDomain()
     anotherDomain.x=1
     anotherDomain.y=2

    AnotherDomain.withNewSession{
       if(anotherDomain.save()){
           println("OK")
        }else{
             println("ERROR")
        }
    }
  }
}

当域对象flushed到数据库时,所有事件都会被触发。现有会话用于刷新。同一会话不能用于处理save()另一个域。必须使用一个新会话来处理AnotherDomain.

UPDATE
使用beforeInsert事件比afterInsert. 如果x并且y依赖于它们的任何持久值属性,Domain它们可以很好地从休眠缓存中获取,而不是去数据库。

于 2013-07-04T00:35:35.710 回答
1

这里有同样的问题,只是.withNewSession还不够。我已经推杆 .save(flush: true)了,一切正常。

def afterInsert() {

    AnotherDomain.withNewSession {
        new AnotherDomain(attribute1: value1, attribute2: value 2).save(flush: true)
    }
}
于 2017-03-24T23:53:11.420 回答