4

我想在我的 grails 域对象中调用服务 beforeDelete() 事件。不幸的是,当事件被触发时,它总是会重复崩溃。我建立了一个重现问题的示例。域对象:

class Gallery {

    def myService

    def beforeDelete() {
            // System.out.println(myService); // not even this works, same error!
        System.out.println(myService.say());
    }
}

服务:

class MyService {

    String say() {
        "hello"
    }
}

测试控制器:

class DeleteController {

    def index() {

        Gallery.list().each {
            it.delete()
        }
    }

    def create() {
        def gallery = new Gallery()
        gallery.save()
    }
}

如果我启动应用程序并调用 create 后跟 index 我得到:

Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [testbeforedelete.Gallery#1]

我想要完成的是调用我的服务,这比这个例子要复杂一些。我无法解释这种行为,也不知道如何应对。我知道休眠事件需要特别注意,但我被困住了。

4

1 回答 1

5

beforeDelete 实际上对您的域类进行了更改。我同意你不会期望这种行为。Hibernate 认为您正在修改实例。您可以使用以下代码来解决您的问题

def beforeDelete() {
    Gallery.withNewSession {
        System.out.println(myService.say());
    }
}
于 2013-03-23T13:06:12.583 回答