grails - delete()在grails 2.4.1中不再存在

标签 grails flush

在将项目从1.3.7迁移到2.4.1时,我偶然发现了几件事。其中之一是,我发现obj.delete()在2.4.1中不再存在,除非我使用obj.delete(flush:true)

当我阅读Grails UserGuide时说“...实例被立即删除”时,我了解到flush:true参数是一种强制立即持久存储对象的选项,而不是“在休眠状态认为正常时将其保留”。

但是,如果obj.delete()从不会真正将对象删除到允许删除到数据库的 Angular 来看,我就不会知道这种可能性。

我在具有以下 Artifact 的演示应用程序中对此进行了测试:

class Msg {
    String  text
}

和:
class MsgController {

    def index() {
        [list:Msg.list()]
    }

    def create() {
        def msg = new Msg(text:'hallo '+Msg.count())
        msg.save()
        redirect action:'index'
    }

    // this delete does NOT delete the object (hibernate creates no sql "delete from ..." command)
    def delete1() {
        def msg = Msg.get(params.id)
        msg.delete()
        flash.message = "msg [$msg.text] with id $msg.id deleted"
        redirect action:'index'
    }

    // this delete does delete the object
    def delete2() {
        def msg = Msg.get(params.id)
        msg.delete(flush:true)
        flash.message = "msg [$msg.text] with id $msg.id deleted using flush:true"
        redirect action:'index'
    }
}

和index.gsp:
<g:if test="${flash.message}">
    <p>${flash.message}</p>
</g:if>

<p>
    <g:link action="index">index</g:link>,
    <g:link action="create">create</g:link>
</p>

<p>
    <g:each in="${list}" var="msg">
        ${msg.id}: [${msg.text}], ***
        <g:link action="delete1" id="${msg.id}">delete()</g:link>
        <g:link action="delete2" id="${msg.id}">delete(flush:true)</g:link>
        <br>
    </g:each>
</p>

最佳答案

由于性能原因,在2.4应用程序中创建的 Controller 默认为只读事务。尽管我不确定100%,但这可能是您看到此消息的原因。

不过,您应该始终在事务内执行删除操作,因此最好的做法是将删除操作移至服务并从那里进行操作(推荐),或者使用grails.transaction.Transactional注释 Controller 操作,这将确保删除操作在最后完成 Controller 执行。

关于grails - delete()在grails 2.4.1中不再存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403679/

相关文章:

c++ - 标准输出并需要刷新它 C++

grails - Grails-App无法启动-ApplicationEventMulticaster未初始化

grails - Groovy “except”语法?

java - Win32 API 与 Java 套接字刷新 (TCP)

c++ - 使用 cout 时输出缓冲区是否自动刷新?

c - 输入/输出问题

mysql - Grails 数据库迁移插件 - sql 与 'bundled changes'

grails - 如何在Grails中查找有关动态方法和/或动态对象的文档?

validation - Grails:重复项和唯一约束验证

flush - NSOutputStream 刷新