将 null 绑定到准备好的语句时发生 Postgres bytea 错误

2023-12-09

我正在使用一个使用 JPA 和 Postgres 数据库的 Java 应用程序,并且我正在尝试创建一个灵活的准备好的语句,它可以处理可变数量的输入参数。一个示例查询可以最好地解释这一点:

SELECT *
FROM my_table
WHERE
    (string_col = :param1 OR :param1 IS NULL) AND
    (double_col = :param2 OR :param2 IS NULL);

这一“技巧”背后的想法是,如果用户仅指定一个参数,例如:param1,我们可以绑定null to :param2,以及WHERE然后子句的行为就好像只检查第一个参数。理论上,这种方法允许我们使用单个准备好的语句来处理任意数量的输入参数,而不需要维护许多不同的语句。

我已经使用纯 JDBC 准备好的语句在本地工作了一个简单的 POC。然而,这样做需要先转换参数,然后再将其与NULL, e.g.

WHERE (double_col = ? OR ?::numeric IS NULL)
                         ^^ does not work without cast

然而,我的实际应用程序正在使用 JPA,并且我不断收到以下持续错误:

Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: double precision = bytea
  Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.

问题是not出现在字符串/文本列中,但仅适用于以下列:double precision在我的 Postgres 表中。我已经尝试了所有的铸造组合,但没有任何效果:

(double_col = :param2 OR CAST(:param2 AS double precision) IS NULL);
(CAST(double_col AS double precision) = :param2 OR :param2 IS NULL);
(CAST(double_col AS double precision) = :param2 OR CAST(:param2 AS double precision) IS NULL);

该错误似乎是说 JDBC 正在向 Postgres 发送一个bytea输入双列,然后 Postgres 会滚动,因为它找不到转换的方法byte为双精度。

Java 代码看起来像这样:

Query query = entityManager.createNativeQuery(sqlString, MyEntity.class);
query.setParameter("param1", "some value");
// bind other parameters here
List<MyEntity> = query.getResultList();

作为参考,以下是我正在使用的所有内容的版本:

Hibernate version         | 4.3.7.Final
Spring data JPA vesion    | 1.7.1.RELEASE
Postgres driver version   | 42.2.2
Postgres database version | 9.6.10
Java version              | 1.8.0_171

由于没有收到任何答案甚至评论的反馈,我正准备放弃,这时我偶然发现了这篇优秀的博客文章:

如何将自定义 Hibernate 参数类型绑定到 JPA 查询

这篇文章提供了两个选项来控制 JPA 通过驱动程序传递给 Postgres(或任何底层数据库实际是什么)的类型。我采用了该方法TypedParameterValue。这是我的代码,继续上面给出的示例:

Query query = entityManager.createNativeQuery(sqlString, MyEntity.class);
query.setParameter("param1", new TypedParameterValue(StringType.INSTANCE, null));
query.setParameter("param2", new TypedParameterValue(DoubleType.INSTANCE, null));
List<MyEntity> = query.getResultList();

当然,路过也是小事null for every查询中的参数,但我这样做主要是为了显示文本和双列的语法。在实践中,我们预计至少有一些参数是非null,但上述语法处理所有值,null 或其他值。

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

将 null 绑定到准备好的语句时发生 Postgres bytea 错误 的相关文章

  • Postgres:显示继承的字段

    我应该实现什么查询来获取继承的列 读过this http www alberton info postgresql meta info html综合帖子没有找到解决办法 如果我理解正确的话 您想知道作为表之间继承的一部分的列的名称 SELE
  • 如何创建不返回任何内容的函数

    我想写一个函数pl pgsql 我在用着Postgres 企业管理器 v3并使用 shell 来创建一个函数 但在 shell 中我必须定义返回类型 如果我不定义返回类型 我将无法创建函数 如何创建一个不返回结果的函数 即创建一个新表的函数
  • pg_dump 没有对象注释?

    有没有办法执行 pg dump 并排除表 视图和列的 COMMENT ON 我广泛使用 COMMENT ON 命令来描述所有对象 并且经常在其中包含换行符以获得更清晰的描述 例如 COMMENT ON TABLE mytable1 IS M
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 部分唯一索引不适用于冲突子句 PostgreSQL

    表结构 create table example a id integer b id integer c id integer flag integer 部分索引 create unique index u idx on example a
  • 如何在 Django QuerySet 中将 DateField() + TimeField() 转换为本地时间?

    我的模型为这些字段 date models DateField 开始时间 models TimeField 结束时间 models TimeField 我想用以下方式注释查询集start datetime and end datetime
  • postgresql:插入...(选择*...)

    我不确定它是否是标准 SQL INSERT INTO tblA SELECT id time FROM tblB WHERE time gt 1000 我正在寻找的是 如果 tblA 和 tblB 位于不同的数据库服务器中怎么办 Postg
  • 使用 PostGIS 拥有通用 GEOGRAPHY 列

    在 PostgreSQL 9 PostGIS 1 5 中 有没有办法创建 通用 GEOGRAPHY 列 我指的是接受 POINT 以及 POLYGON LINESTRING 等的列 到目前为止 我只在 Internet 上看到过像 GEOG
  • PostgreSQL - 致命:用户“myuser”身份验证失败[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚在我的 Ubuntu Box 中安装了 PostGreSQL 我想做的第一件事就是创建一个数据库 我读了文档 http www postgres
  • Django 模型:默认日期时间未转换为 SQL CURRENT_TIMESTAMP

    我正在使用 Django 模型创建 PostgreSQL DB 我有一个 DateTimeField 我想将当前时间戳设置为默认值 我知道有多个消息来源建议如何做到这一点 但是 当我在 Django 之外检查数据库时 默认时间戳不会显示 我
  • PostgreSQL 错误 42501:架构权限被拒绝

    我正在 ASP NET 中构建一个用户注册系统 使用 PostgreSQL 数据库来维护用户信息 作为注册过程的一部分 用户会收到一条确认消息 他们必须单击其中的链接来验证其电子邮件地址 然后 他们将进入一个可以创建密码的页面 一旦用户提供
  • JPA EntityManager 缓存

    我有一个实体定义如下 public class Version Id private Long id private String content Transient private Model model 据我所知 当find操作是在实体
  • SELECT 在 PL/pgSQL 函数中引发异常

    我想在函数内实现循环 但收到此错误 ERROR 查询没有结果数据的目标 代码 CREATE OR REPLACE FUNCTION my function ill int ndx bigint RETURNS int AS DECLARE
  • Postgres - 即使我的角色/用户已被授予“读取”权限,也无法从表中“选择”

    我在 postgres 上有一个管理员角色 用户和一个开发人员角色 开发人员角色继承了我为将来方便而创建的 readaccess 角色的属性 如果我运行 du 我得到 Role name Attributes Member of devel
  • 如何在 PostgreSQL 中返回不同时区的当前日期

    我正在开发一个使用东部时间并将数据库设置为太平洋时间的应用程序 这已经引起了一些问题 但我们被告知不可能有其他方式 所以我们只能解决它 不管怎样 我遇到的麻烦之一就是获取今天的约会 由于数据库位于太平洋 如果我使用以下命令询问今天的日期cu
  • Django 独特的不工作

    我在从查询中过滤掉重复项时遇到问题 我正在使用 Django 1 4 和 Postgres 8 4 13 我在我的模型对象上使用这个查询 它是一个 jquery 自动完成 term request GET get term field re
  • JPA 中所有命名查询的列表

    我想获取应用程序中所有 NamedQueries 的列表 并且我还想在运行时一般调用它们 是否有一个选项可以获取列表以及某种元数据 一般来说是某种反射 另一个线程为 NHibernate 提供了某种解决方案 即使使用 Hibernate 作
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en

随机推荐

  • 在 Java 中如何在修改对象时迭代该对象? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 高效相当于在迭代集合时进行删除 在java中迭代集合时从集合中删除项目 我正在尝试循环HashMap Map
  • 运行时 GPU 执行还是 CPU 执行?

    我觉得必须有一种方法来编写代码 使其可以在 CPU 或 GPU 中运行 也就是说 我想编写一些具有 例如 CPU FFT 实现的东西 如果没有 GPU 该实现可以执行 但当 GPU 存在时默认为 GPU FFT 我无法提出正确的问题来让互联
  • 我的 JavaScript 代码只打印一行。我需要它打印 10 行,每行 20 个字符。

    这是一个抛硬币随机发生器 我需要打印 10 行 20 列 这就是我被困住的地方 每次我单击按钮时 我的代码似乎都会正确随机化 它显示 20 列 但我似乎无法让它打印第二行 这可能是一些简单的事情 我只是没有抓住 任何事情都会受到赞赏 Jav
  • 确定 viewWillAppear 是来自打开应用程序,还是取消选择模式

    我目前正在初始屏幕上加载应用程序加载数据 在我看来这会发生 我还有一个在此屏幕上弹出的模式 关闭时执行与 viewWillAppear 中加载数据相同的逻辑 如何仅在应用程序打开时加载数据 而不是在模式关闭时加载数据 UIViewContr
  • std::vector 中的数据存储是连续的吗? [复制]

    这个问题在这里已经有答案了 我有一个字符向量 我想将其内容作为 char 传递给另一个函数 void foo boost shared ptr
  • 难以理解/可视化 SICP 流汉明数程序

    我基本上陷入了 SICP 练习 3 56 的困境 问题是这样的 练习3 56 R Hamming 首先提出的一个著名问题是 按升序且不重复地枚举除 2 3 或 5 之外没有质因数的所有正整数 一种明显的方法是简单地测试每个整数反过来看看它是
  • 制作一个循环来形成一个列表?

    def make services routes data routes curr route x split routes routes data service data1 x 1 106 106 1 1 43009 106 2 51
  • C# 将列表与自定义对象进行比较但忽略顺序

    我正在尝试比较两个包含自定义对象的列表 包装在一个对象中 我不关心顺序 但如果列表 1 包含 1 2 3 4 那么列表 2 必须and only包含这些元素 例如 4 2 3 1 基于比较两个 List 对象是否相等 忽略顺序ignorin
  • 如何在 PHP 中实时实现 For 循环

    我想制作一个实时给出结果的脚本 在我的脚本中它有 3 个步骤 第一步是从网页中获取所有链接 我使用 pregmatch all 函数 因为我需要的所有链接都以相同的域开始http example com docs 并从中抓取http tes
  • Windows 中的 64 位和 32 位注册表问题(C# 编程)

    我正在尝试将数据从 Windows 注册表获取到我的软件 但有一件事我遇到了麻烦 如果我的软件在 64 位系统上运行 则注册表路径将为 HKEY LOCAL MACHINE SOFTWARE Wow6432Node AVAST Softwa
  • 将 BigQuery 脚本的结果返回到 Python 客户端

    截至 2019 年秋季 BigQuery 支持脚本编写 这太棒了 我不明白的是BigQuery 的 Python 客户端尚有能力利用这一新功能 例如 运行以下 Python 代码 client bigquery Client QUERY B
  • EF Core,按 UTC 日期的月份和年份分组

    我将所有日期存储为 UTC 并且我需要按月份和年份对实体进行分组 所以我正在这样做 dbContext Tickets Where x gt x Date gt from x Date lt to GroupBy x gt new Year
  • TableView 单元格中 TextView 的可变高度

    我有一个基本的UITableView 我在线填写了一个网络服务 但我找不到一种方法来根据我的高度设置单元格的高度 动态单元格数量 textView 这是我填写单元格的方式 UITextView textView UITextView cel
  • PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?

    正如标题所述 我正在尝试使用 Bootstrap 的 Typeahead js 它需要像这样的 JSON 字符串 var subjects PHP MySQL SQL PostgreSQL HTML CSS HTML5 CSS3 JSON
  • 如何让图表内容区域占据其可用的最大区域?

    非常简单的问题 如何让图表内容区域占据其可用的最大区域 我正在使用 JavaFX 就我而言 我想要有许多基于 true false 的 AreaChartsyAxis 0 1 不幸的是 我找不到如何使用类似方法更改这些图表的内容高度的解决方
  • 如何使用 Maven 将 JavaFX 项目部署到 EXE?

    我希望这个问题看起来并不基础 但尽管研究了几个小时 我还是找不到任何好的文档 我将 Maven 版本 3 3 9 用于我的 JavaFX 版本 11 0 2 和 JDK 13 0 1 项目 并想要构建一个 EXE 做到这一点最简单的方法是什
  • 如何使用java代码获取USB驱动器序列号或元数据

    我用java准备了一个桌面应用程序 我想通过 Pendrive 或任何其他 USB 驱动器来保护它 但我不知道如何使用java代码读取pendrive或usb驱动器 这样我就可以限制应用程序 请帮助我该怎么做 或者对此有其他想法吗 谢谢 就
  • 我可以像“delete[]”那样获取动态分配数组的大小吗?

    我想知道如何delete 知道动态分配数组的大小 并且我发现this问题 还有this微软论坛上的问题 但答案是相似的 事实证明answer is 它通常存储在您分配的内存之前的 头 段中 因此 确切的细节是特定于实现的 在该答案下 其中一
  • 如何使textview文本链接可点击

    Android Studio 2 3 1 我正在尝试创建一些不是 Web 或 html 的文本 而只是一些普通文本 我希望这些文本看起来像一个 Web 链接 单击时可以单击 正文是这样的 Contains 3 reviews 我想让它看起来
  • 将 null 绑定到准备好的语句时发生 Postgres bytea 错误

    我正在使用一个使用 JPA 和 Postgres 数据库的 Java 应用程序 并且我正在尝试创建一个灵活的准备好的语句 它可以处理可变数量的输入参数 一个示例查询可以最好地解释这一点 SELECT FROM my table WHERE