removeFrom* 不起作用并且没有错误

2024-01-11

我有一个我认为很简单的问题,但无法解决...... 由于某种原因,我有一个使用removeFrom*.save() 的控制器,它不会抛出任何错误,但不会执行任何操作。

跑步 Grails 1.2 Linux/Ubuntu

删除以下应用程序以重现该问题......

我通过 create-domain-class 有两个域对象 - 工作(有很多笔记) - 注释(属于工作)

我通过 create-controller 有 3 个控制器 - JobController(运行脚手架) - NoteController(运行脚手架) - JSONNoteController

JSONNoteController 有一个主要方法deleteItem,旨在删除/删除注释。

它执行以下操作

  • 一些请求验证
  • 从作业中删除注释 - jobInstance.removeFromNotes(noteInstance).save()
  • 删除注释 - noteInstance.delete()
  • 以 json 响应的形式返回状态和剩余数据集。

当我运行此请求时 - 我没有收到任何错误,但似乎 jobInstance.removeFromNotes(noteInstance).save() 不执行任何操作,也不会引发任何异常等。 我怎样才能找到原因?

我附上了一个示例应用程序,它通过 BootStrap.groovy 添加一些数据。 只需运行它 - 您就可以通过默认的脚手架视图查看数据。

如果您运行 Linux,则可以从命令行运行以下命令 得到 ”"

你可以一遍又一遍地运行它,不会发生任何不同的情况。如果您运行的是 Windows,您还可以将该 URL 粘贴到您的网络浏览器中。

请帮助 - 我被困住了! 代码在这里链接文本 http://old.nabble.com/file/p27255806/gespmtest.tar.gz

注释域

package beachit

class Note
{

    Date dateCreated
    Date lastUpdated

    String note

    static belongsTo = Job

    static constraints =
    {
    }

    String toString()
    {
        return note
    }
}

工作领域

package beachit

class Job
{

    Date dateCreated
    Date lastUpdated

    Date        createDate
    Date        startDate
    Date        completionDate

    List notes

    static hasMany = [notes : Note]

    static constraints =
    {
    }

    String toString()
    {
        return createDate.toString() + " " + startDate.toString();
    }
}

JSONNoteController

package beachit

import grails.converters.*
import java.text.*

class JSONNoteController
{

    def test = { render "foobar test"  }

    def index = { redirect(action:listAll,params:params) }

    // the delete, save and update actions only accept POST requests
    //static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def getListService =
    {
        def message
        def status
        def all = Note.list()

        return all
    }

    def getListByJobService(jobId)
    {
        def message
        def status

        def jobInstance = Job.get(jobId)
        def all

        if(jobInstance)
        {
            all = jobInstance.notes
        }
        else
        {
            log.debug("getListByJobService job not found for jobId " + jobId)
        }

        return all

    }

    def listAll =
    {
        def message
        def status
        def listView

        listView    = getListService()
        message     = "Done"
        status      = 0

        def response = ['message': message, 'status':status, 'list': listView]
        render response as JSON
    }

    def deleteItem =
    {
        def jobInstance
        def noteInstance
        def message
        def status
        def jobId = 0
        def noteId = 0
        def instance
        def listView
        def response

        try
        {
            jobId = Integer.parseInt(params.job?.id)
        }
        catch (NumberFormatException ex)
        {
            log.debug("deleteItem error in jobId " + params.job?.id)
            log.debug(ex.getMessage())
        }

        if (jobId && jobId > 0 )
        {
            jobInstance = Job.get(jobId)

            if(jobInstance)
            {
                if (jobInstance.notes)
                {
                    try
                    {
                        noteId = Integer.parseInt(params.note?.id)
                    }
                    catch (NumberFormatException ex)
                    {
                        log.debug("deleteItem error in noteId " + params.note?.id)
                        log.debug(ex.getMessage())
                    }

                    log.debug("note id =" + params.note.id)
                    if (noteId && noteId > 0 )
                    {
                        noteInstance = Note.get(noteId)
                        if (noteInstance)
                        {
                            try
                            {
                                jobInstance.removeFromNotes(noteInstance).save()
                                noteInstance.delete()

                                message = "note ${noteId} deleted"
                                status = 0
                            }
                            catch(org.springframework.dao.DataIntegrityViolationException e)
                            {
                                message = "Note ${noteId} could not be deleted - references to it exist"
                                status = 1
                            }
                            /*
                            catch(Exception e)
                            {
                                message = "Some New Error!!!"
                                status = 10
                            }
                            */
                        }
                        else
                        {
                            message = "Note not found with id ${noteId}"
                            status  = 2
                        }
                    }
                    else
                    {
                        message = "Couldn't recognise Note id : ${params.note?.id}"
                        status = 3
                    }
                }
                else
                {
                    message = "No Notes found for Job : ${jobId}"
                    status = 4
                }
            }
            else
            {
                message = "Job not found with id ${jobId}"
                status = 5
            }

            listView    = getListByJobService(jobId)

        } // if (jobId)
        else
        {
            message = "Couldn't recognise Job id : ${params.job?.id}"
            status = 6
        }

        response = ['message': message, 'status':status, 'list' : listView]
        render response as JSON

    } // deleteNote
}

我让它工作了......虽然我无法解释为什么。

我替换了 deleteItem 中的以下行

noteInstance = Note.get(noteId)

与以下

noteInstance = jobInstance.notes.find { it.id == noteId }

由于某种原因, jobInstance.removeFromNotes 使用该方法返回的对象而不是 .get 更奇怪的是,所有其他 gorm 函数(实际上不确定动态函数)都针对 noteInstance.get(noteId) 方法工作。

至少它可以工作!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

removeFrom* 不起作用并且没有错误 的相关文章

随机推荐

  • 心灵与大脑的沟通:如何让大脑更好地理解我们的情感

    1 背景介绍 心理学和人工智能之间的界限已经不断模糊化 尤其是在情感智能方面 情感智能是一种新兴的人工智能技术 旨在让计算机更好地理解和回应人类的情感 这篇文章将探讨如何让大脑更好地理解我们的情感 以及在这个过程中涉及的核心概念 算法原理
  • AI大模型应用入门实战与进阶:Part 7 Transformer模型解析

    1 背景介绍 自从2020年的大模型如GPT 3等开始引起广泛关注 人工智能领域的研究和应用得到了重大推动 在这一波技术创新中 Transformer模型发挥着关键作用 这篇文章将深入探讨Transformer模型的核心概念 算法原理和实例
  • 强化学习求解TSP(一):Qlearning求解旅行商问题TSP(提供Python代码)

    一 Qlearning简介 Q learning是一种强化学习算法 用于解决基于奖励的决策问题 它是一种无模型的学习方法 通过与环境的交互来学习最优策略 Q learning的核心思想是通过学习一个Q值函数来指导决策 该函数表示在给定状态下
  • 如何成为一名数据科学家:必须掌握的技能和知识

    1 背景介绍 数据科学家是一种新兴的职业 它结合了计算机科学 统计学 数学和领域知识等多个领域的知识和技能 以解决实际问题 数据科学家的主要任务是收集 清洗 分析和解释大量数据 从中挖掘有价值的信息和知识 并将其应用于决策和预测 数据科学家
  • 机器智能与人类智能的竞争:技术创新的驱动力

    1 背景介绍 人工智能 Artificial Intelligence AI 和机器学习 Machine Learning ML 是最近几年最热门的技术领域之一 随着数据量的增加和计算能力的提高 机器学习技术的发展得到了极大的推动 机器学习
  • 电脑快速打开计算器的方法

    大家好 我是爱你三千遍斯塔克 我们平常在运算时 经常要要使用计算器 那么计算器有什么快速打开方法吗 这里有一些参考方法 可供大家进行参考 希望对大家有帮助 希望你喜欢我的内容 记得关注我哦 我会继续为大家带来更好的作 1 win R 打开运
  • 机器学习中的知识共享:模型与数据的交流与协作

    1 背景介绍 机器学习 Machine Learning 是一种通过数据学习模式和规律的计算机科学领域 在过去的几年里 机器学习技术在各个领域得到了广泛应用 如图像识别 自然语言处理 推荐系统等 随着数据规模的不断增长 单个机器学习模型的复
  • 人工智能与机器学习:未来的编程范式

    1 背景介绍 人工智能 Artificial Intelligence AI 和机器学习 Machine Learning ML 是现代计算机科学的重要领域之一 它们旨在让计算机能够自主地学习 理解和进化 以解决复杂的问题 随着数据量的增加
  • JDK21和 Flowable 7.0.0

    JDK21和 Flowable 7 0 0 一 Flowable 二 项目搭建 1 依赖包 2 数据库 3 资源文件 1 YML配置文件 2 Drools kbase
  • 序列模型(4)—— Scaling Laws

    本文介绍 LLM 训练过程中重要的 Scaling Laws 这是一个 经验规律 指出了 固定训练成本 总计算量FLOPs C C C 时 如何调配模型规模 参数量 N N
  • golang中有没有一种有效的方法来计算执行时间?

    我正在寻找计算 go 执行时间的最佳方法 func main start time Now time Sleep time Second 2 something doing here elapsed time Since start fmt
  • PHP 正则表达式:找不到结束分隔符“^”

    我在使用正则表达式时遇到了一些麻烦 这是我的代码 pattern 0 9 if preg match pattern input echo yes else echo nope 我运行它并得到 警告 preg match function
  • 正则表达式检查 Facebook 视频 URL

    我尝试使用正则表达式检查 Facebook 视频网址 这是有效的 Facebook 视频 URL 示例 https www facebook com video php v 100000000000000 https www faceboo
  • Spark中高效计算top-k元素

    我有一个类似于以下内容的数据框 key thing value u1 foo 1 u1 foo 2 u1 bar 10 u2 foo 10 u2 foo 2 u2 bar 10 并希望得到以下结果 key thing sum value r
  • Chrome 版本 44 在 selenium 测试中存在一些问题

    我正在使用 Selenium 和 Chrome 编写一个测试 昨天当我的 Chrome 从 43 更新到 44 时 我的测试遇到了一些关于 action sendkey arrow down 等的问题 我尝试卸载 Chrome 并安装 Ch
  • MySQL:一位的最小数据类型

    我想在表中添加一列 其中包含两个值 1 或 0 MySQL 中存储数据的最小数据类型是什么 A TINYINT 1 可以包含之间的数字 127 to 127 您可以使用位 1 http dev mysql com doc refman 5
  • 在 gradle.build 中使用 fatjar 插件时如何指定主类

    我有兴趣在单个可执行 jar 文件中构建一个包含所有模块依赖项和外部 jar 的单个 jar 我将能够使用该文件运行java jar myApp jar 我有模块 A 它依赖于模块 B 目前我正在使用 gradle 我的build grad
  • 如何以特定于区域设置的方式格式化不完整的日期和时间

    如何以特定于区域设置的方式格式化不完整的日期和 或时间 我有一个日期 时间存储在一组 7 个字符串中 dayOfWeek 一周中的哪一天 1 7 dayOfMonth 该月的哪一天 1 31 monthOfYear 一年中的月份 0 11
  • CSS焦点子元素改变父元素

    我想设计一个在表单字段内具有标签和输入的表单 当我在输入内写入内容 可能带有焦点 时 我希望边框亮起一些蓝色 现在我有这样的东西 HTML div class login form field div
  • removeFrom* 不起作用并且没有错误

    我有一个我认为很简单的问题 但无法解决 由于某种原因 我有一个使用removeFrom save 的控制器 它不会抛出任何错误 但不会执行任何操作 跑步 Grails 1 2 Linux Ubuntu 删除以下应用程序以重现该问题 我通过