Tod*_*d M 5 grails grails-orm grails-domain-class
尝试使用 beforeDelete 事件在对象上集成测试 Grails GORM 删除。问题是在集成测试中没有触发 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)
}
}
Run Code Online (Sandbox Code Playgroud)
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}"
}
Run Code Online (Sandbox Code Playgroud)
圣杯 1.3.5
有什么建议?
我为什么在乎?
我的测试失败的原因是:
org.springframework.dao.InvalidDataAccessApiUsageException:已删除的对象将通过级联重新保存(从关联中删除已删除的对象):[com.v.ChallengeMember#1];嵌套异常是 org.hibernate.ObjectDeletedException:已删除的对象将通过级联重新保存(从关联中删除已删除的对象):[com.v.ChallengeMember#1]
但是,删除在浏览器中工作正常,因为 beforeDelete 被触发。
好吧,如果我将其包装在 withNewSession 中,它就会触发 -
ChallengeMember.withNewSession {
membership.delete(flush:true)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |