【问题标题】:GORM events not firing in integration testsGORM 事件未在集成测试中触发
【发布时间】:2010-12-08 10:47:50
【问题描述】:

尝试使用 beforeDelete 事件在对象上集成测试 Grails GORM delete。问题是集成测试中没有触发 beforeDelete 事件:

class ChallengeMembershipTests extends GroovyTestCase {
     void testQuitChallenge() {
      VUser user = VUser.build()
      assertNotNull("user should be saved", user.id)
      UserChallenge challenge = UserChallenge.build(owner: user)
      assertNotNull("challenge should be saved", challenge.id)

      ChallengeMember member = ChallengeMember.build(challenge: challenge)
      println "MEMBER: ${member}"
      assertNotNull("member should be saved", member.id)
      member.delete(flush:true)        

  }
}

ChallengeMember 的相关部分:

  def beforeDelete = {
      log.info "begin deleting challenge member ${this}"
      user.removeFromChallenge_memberships(this)
      challenge?.removeFromParticipants(this)
      team?.removeFromMembers(this)
      log.info "deleting challenge member ${this}"
  }

Grails 1.3.5

有什么建议吗?

我为什么要关心?

我的测试失败了,原因是:

org.springframework.dao.InvalidDataAccessApiUsageException:已删除的对象将被级联重新保存(从关联中删除已删除的对象):[com.v.ChallengeMember#1];嵌套异常是 org.hibernate.ObjectDeletedException:已删除的对象将被级联重新保存(从关联中删除已删除的对象):[com.v.ChallengeMember#1]

但是,从浏览器中删除可以正常工作,因为 beforeDelete 正在被触发。

【问题讨论】:

    标签: grails grails-orm grails-domain-class


    【解决方案1】:

    好吧,如果我用 withNewSession 换行,它就会触发-

    ChallengeMember.withNewSession {
       membership.delete(flush:true)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-04
      • 2013-09-26
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多