【发布时间】:2016-11-24 17:06:16
【问题描述】:
我们遇到了一个奇怪的问题,即在第一个请求中创建了对象,但在第二个请求中没有返回它们。 假设我们有两个域类:
Class A {
static hasMany = [bs: B]
def afterUpdate() {
this.addToBs(new B(a: this))
this.save()
}
}
Class B {
static belongsTo = [a: A]
}
当通过 PUT /as/<id> 在 A 的实例上发送 put 时,update() 会在带有 @Transactional 注释的 RestfulController 中调用。
我们可以观察到,在第一个请求的响应返回后,API 使用者每隔一段时间发送一个后续请求,GET /bs 并没有返回 B 的新实例,这应该是在第一个请求中创建,并在后续请求中返回。
我希望 grails 仅在事务提交后才将响应发送给 API 使用者,这意味着下一个请求应该会看到该事务的所有更改,不是吗?
这种行为的原因可能是什么?在 grails 应用程序已经将响应发送给 API 使用者之后,事务是否已提交?如果是这样,@Transactional 周围的update() 是默认打开的原因吗?
我知道在这个例子中afterUpdate 中的代码可能也可以放入beforeUpdate,但我只是尽量简化这个例子。
【问题讨论】:
标签: grails transactions grails-orm