将结果行强制转换为对象

2024-04-26

有没有办法将调用存储过程获得的结果行强制转换为特定对象,以便我可以仅将该对象的列表传递到视图中?

我知道我可以使用 Node.list() 之类的东西来做到这一点,但我最终将用一个相当复杂的存储过程替换 getnodes() ,该存储过程创建临时表并执行一些优化的 sql fu。但现在我只致力于 grails 交互。

所以在 MySQL 端我有以下存储过程:

CREATE DEFINER=`root`@`255.255.255.255` PROCEDURE `getnodes`()
BEGIN
   select * from node;
END

在 grails 控制器上我有以下内容:

def nodes = new ArrayList<Node>()

// collect all the nodes returned
sql.eachRow("{call getnodes()}") { 
    nodes.add(it as Node)
}

println "Nodes size is: " + nodes.size()
nodes.eachWithIndex { d, i ->
    println "$i : $d"
}

我的计划是将节点传递给视图。

问题是它在线上爆炸:

nodes.add(it as Node)

这可能吗?我的意思是这应该只是强制吧?我究竟做错了什么?


不,它不应该“只是强迫”。关于以下事项:

sql.eachRow("{call getnodes()}") { 
    nodes.add(it as Node)
}

的类型it是 GroovyRowResult,所以it as Node将会通知GroovyRowResult.asType(Node.class)

所以这个强制转换将会失败,除非这个方法的作者专门处理这个转换。由于从 GroovyRowResult 转换为 Node 相当晦涩,我认为人们不应该合理地期望这种情况得到处理。

一个明显的解决方案是自己进行转换:

sql.eachRow("{call getnodes()}") {GroovyRowResult it ->

    Node node = // TODO: Code to convert it to a Node 
    nodes.add(node)
}

或者,您可以使用元编程来覆盖asType的方法GroovyRowResult这样它还可以处理到 Node.js 的转换。

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

将结果行强制转换为对象 的相关文章

  • MySQL SUM 具有相同的 ID

    抱歉 这个真正简单的问题 我刚刚学习 PHP 和 MySQL 我已经在谷歌上搜索了一个多星期 但没有找到任何答案 我创建了一个简单的财务脚本 表格如下 table a aid value 1 100 2 50 3 150 table b b
  • mysql 查询从给定的表结构创建 SEO 友好的 url

    我正在尝试使用下表创建 SEO 友好的 URL 类别表 http sqlfiddle com 2 c474a 4 页表 http sqlfiddle com 2 c474a 5 我正在尝试编写一个 mysql 查询 该查询将使用产生以下输出
  • 如何在 Windows 上的 PostgreSQL 中创建具有 UTF-8 排序规则的数据库?

    我正在为 Windows 上的 Bitbucket 服务器配置 PostgreSQL 数据库 在官方guide https confluence atlassian com bitbucketserver connecting bitbuc
  • 将数据插入多个表 PHP MySQL

    我有一个用于存储食谱的基本数据结构 它由三个表组成 如下所示 表 1 食谱 recipe id recipe name 表 2 成分 成分 ID 成分名称 表 3 配方 成分 配方 id 成分 id 我在添加新配方时遇到问题 想知道插入的最
  • 可能的 PDOException 错误(MySQL 5)?

    因此 我正在为我的网络应用程序设置一个安装程序 并具有数据库凭据的输入字段 我的验证过程的一部分包括测试数据库连接 使用 PHP 的 PDO 库 如果连接失败 我希望能够区分错误的密码 错误的地址 不存在的数据库名称等 以便我可以引用表单上
  • SSIS ODBC SQL 参数

    我在 odbc 源数据流任务中有一个 SQL 命令需要采用参数 但不存在添加参数的选项 我尝试将数据库添加为与 ODBC 提供程序的 ADO NET 连接 但也没有可用的参数 还尝试将其作为 OLEDB 连接 但没有可用于 ODBC 的提供
  • Oracle 中的 TO_Char 数字格式模型

    我不完全理解如何使用 to char 函数将数字转换为具有适当格式模型的字符串 实际数字具有以下格式 使用逗号作为小数点分隔符 始终为 5 个小数 整数最多可达 6 可能是无限的 但目前绝不会超过 6 数字可以是正数或负数 数字可以以 0
  • 如何在 WHERE 子句中最佳地使用 COALESCE() ?

    这是我的查询 select coalesce qa2 subject qa subject as question subject qa body select count from viewed items vi where coales
  • 从 Hibernate 生成 SQL 脚本

    我正在为我的 Java Swing 应用程序使用 Hibernate 4 3 5 Final 并且我做了很多工作UDPATE INSERT and DELETE与它 在 HQL 中或与Criteria 现在 我想做的是导出对数据库所做的所有
  • 更改 Amazon RDS MYSQL Linux 服务器的 innodb_log_file_size 变量值

    我们正在使用 Amazon RDS linux 服务器作为 MYSQL 更改 my cnf 文件变量值的方法是什么 我正在尝试更改 innodb log file size 变量 您能告诉我哪一个是最好的改变方式吗 所以请帮我解决这个问题
  • sql 查询查找匹配属性

    我目前正在做一个类似易货系统的系统 情况是这样的 客户 Jasmine 要求输入 NAME 属性 她需要寻找的内容 并输入 SEEK 属性 她需要寻找的内容 为了获得结果 SEEK 属性必须与其他客户的 Name 属性匹配 其他客户的 SE
  • 选择特定值之后的项目

    说这是我的sql SELECT title author ISBN FROM bs books ORDER BY ISBN LIMIT 3 它只是从某个表中选择所有内容 标题 作者等 假设我想选择某个标题后面的所有项目 而不是按字母顺序或其
  • 如何对 MySQL 数据库中的 ENUM 列进行排序?

    I have colorMySQL 表中的列类型为ENUM RED YELLOW MY COLOR BLACK 还有另一个name列的类型是VARCHAR 30 我想按以下顺序获取所有表行 YELLOW首先行 排序依据name RED最后一
  • Sequel Pro / MAMP 在哪里存储本地数据库?

    我通过 Sequel Pro 和 MAMP 在我的计算机上创建了一些数据库 并运行 localhost 来查看它们 但是 我全新安装了 Mac OS Lion 但忘记将数据库备份到 sql 文件 我会定期备份文件 并预装计算机的副本 有谁知
  • 复制行并自动递增非身份键 ID 列的 INSERT INTO 语句

    给定一个包含三列的表 ID 主键 非自动递增 GroupID 一些价值 我正在尝试编写一个 SQL INSERT INTO 语句 该语句会将具有一个 GroupID 的每一行复制到一个新的 GroupID 中 起始表示例 ID GroupI
  • 当从搜索表单动态构建 WHERE 子句时,如何防止 SQL 注入?

    我知道在 Java 中保护 SQL 查询免受 SQL 注入的唯一真正正确的方法是使用准备好的语句 然而 这样的语句要求基本结构 选择的属性 连接的表 WHERE条件的结构 不会改变 我这里有一个 JSP 应用程序 其中包含一个带有大约十几个
  • Spring JPA (Hibernate) Entity Manager 何时将连接返回到连接池?

    在我的 java 进程中 我使用以下 spring 配置连接到 MySql Configuration EnableTransactionManagement PropertySources PropertySource classpath
  • Spring Boot MultipartFile上传getOriginalFileName根据浏览器不同而不同

    我使用的是 spring boot 1 5 7 RELEASE 版本 我使用以下方法上传文件 Autowired private MyService mySerice RequestMapping value uploadFile meth
  • CodeIgniter 中的多条件 WHERE 子句

    我想删除核心 PHP 中的一些数据 例如这个查询 WHERE user id id AND sender id send id OR user id send id AND sender id id 所以我在 CodeIgniter 中使用
  • 连接2个表区分大小写

    我有 2 个表 需要获取品牌代码的结果 例如 在数据库中 我有两个不同的品牌 但它们的代码是相同的 只有小写和大写不同 例如 代码名称 关于耐克 和阿迪达斯 如何在代码上内连接 2 个表以分别获取这 2 个表 现在 在内连接之后我得到了这

随机推荐

  • RedHat 6/Oracle Linux 6 不允许通过 ssh 进行密钥身份验证

    密钥已正确部署在 ssh authorized keys 中 然而 ssh 不断提示输入密码 几个问题 主要是特权 但也与 RedHat 6 上的 SELinux 有关 以下脚本应该可以修复所有问题 请替换
  • 非矩形 CSS 图像链接

    我有以下要求 大图像包含多个需要链接到其他页面的 热点 听起来很简单 我创建了一个简单的 html 页面 一个带有背景图像的 div 和使用带有图像精灵翻转的 CSS 的绝对定位链接 然而 现在我看到了另一张图像 热点不是方形的 而是不规则
  • 仅带有取消按钮的消息框

    我们可以有一个只有取消按钮的消息框吗 如果是这样 有什么提示吗 是否有内置的 api 方法来仅获取带有取消按钮的消息框 如何创建自定义模式对话框 有链接吗 您可以通过以下方式使用线程本地 CBT 挂钩SetWindowsHookEx 定制M
  • extern 在 C# 中如何工作?

    每当我足够深入地观察反射镜时 我都会碰到extern没有来源的方法 我阅读了 msdn 文档http msdn microsoft com en us library e59b22c5 v vs 80 aspx http msdn micr
  • 需要一些异步调用的单例类

    我有一个单例类 它在其构造上加载一些数据 问题是加载这些数据需要调用async方法 但构造函数不能async 换句话说 我的班级具有以下结构 public class Singleton private static Singleton i
  • 如何杀死正在运行的线程? [复制]

    这个问题在这里已经有答案了 可能的重复 杀死 pthread 中的线程 https stackoverflow com questions 2084830 kill thread in pthread 在包含线程启动的源代码之后 过了一会儿
  • Qt 在 ItemDelegate 之外访问模型数据

    我有一些继承的模型类QAbstractListModel VehiclesModel h class VehiclesModel public QAbstractListModel Q OBJECT public enum Roles Im
  • 如何解决maven中“无法执行目标”maven-surefire-plugin:2.19.1”

    我正在尝试在 Maven 中构建一个简单的有效登录测试 以便稍后在詹金斯服务器中运行 问题是 每次我构建 全新安装 时 我都会收到以下错误 ERROR Failed to execute goal org apache maven plug
  • 无法找到 PySpark 内核 - awsglue 与 vscode 的交互式会话

    我最近按照说明使用 vscode 安装 Glue Interactive 会话 但找不到 pyspark 内核 只能看到 Glue Spark 我想我已经安装了下面的所有内容 顺便说一句 我在 Windows 上 pip3 install
  • 如何在 Python 中创建 GUID/UUID

    如何在 Python 中创建独立于平台的 GUID UUID 我听说有一种在 Windows 上使用 ActivePython 的方法 但它只是 Windows 因为它使用 COM 有没有使用普通Python的方法 The uuid模块 h
  • 定义 Rails 迁移中的方法

    我试图在迁移中定义一个方法 但出现未定义的方法错误 undefined method do something specific for
  • 是否可以矢量化 scipy.optimize.fminbound?

    我有一些按时间参数化的轨迹数据点 我想知道每个点到拟合它们的曲线的最短距离 似乎有几种方法可以解决这个问题 例如here https kitchingroup cheme cmu edu blog 2013 02 14 Find the m
  • Hibernate 抛出一个预期的 OPEN,发现 '+'

    下面是我的 hql update User set count count 2 where id 1 并且有以下异常详细信息 org hibernate hql internal ast QuerySyntaxException expec
  • 量角器错误“WebDriverError:指定的超时类型无效:ms”

    如果没有任何更改 我的量角器测试开始出现此错误 14 07 05 E runner Unable to start a WebDriver session 14 07 05 E launcher Error WebDriverError I
  • 将 URL 参数 (?p=234) 添加到 Amazon Cloudfront 上的文件不会强制刷新文件 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有通过 Amazon Cloudfront 提供的 JS 和 CSS 文件 到目前为止 我一直在使用自己的运行 Varnish 的服务器 当我更新任
  • Angular7 - 将组件注入另一个组件

    在另一个组件中注入组件来访问注入组件中的函数或属性是否正确 注意 这些组件都不是另一个组件的子组件 import UsersComponent from users users component Component selector ap
  • 使用java工具的类似Sidekiq的队列?

    我想要一个工作队列 其行为几乎与 ruby 的 sidekiq 完全相同 它不need使用 Redis 但它可以 我只是不能使用 ruby 甚至不能使用 Jruby 基本上 我希望能够创建使用某些参数运行的作业 并且工作池执行作业 工作人员
  • 在 win 7 任务计划程序中顺序运行批处理文件

    我有 2 个批处理文件作为单个任务中的 操作 第一个使用 Microsoft Security Essentials 扫描病毒 第二个让计算机进入睡眠状态 问题是 当任务运行时 似乎两个批处理文件同时运行 也就是说 我可以看到病毒扫描的开始
  • 比较 2 个数组并列出差异 - Swift

    我想知道如何比较两个布尔数组并列出不匹配的布尔值 我写了一个包含 2 个数组的简单示例 let array1 true false true false let array2 true true true true 我如何比较 array1
  • 将结果行强制转换为对象

    有没有办法将调用存储过程获得的结果行强制转换为特定对象 以便我可以仅将该对象的列表传递到视图中 我知道我可以使用 Node list 之类的东西来做到这一点 但我最终将用一个相当复杂的存储过程替换 getnodes 该存储过程创建临时表并执