当前位置: 首页 > 知识库问答 >
问题:

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

牧梓
2023-03-14
SELECT *
FROM my_table
WHERE
    (string_col = :param1 OR :param1 IS NULL) AND
    (double_col = :param2 OR :param2 IS NULL);
WHERE (double_col = ? OR ?::numeric IS NULL)
                         ^^ does not work without cast
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.
(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);

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

共有1个答案

西门建安
2023-03-14

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

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

post给出了两个控制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();
 类似资料:
  • 问题内容: 我使用准备好的语句编写了select语句。每次尝试运行时都会出现此错误。我如何克服这个错误?我的jdbc连接器是mysql-connector- java-5.1.13-bin.jar。我的代码: 错误代码.. 2013年10月1日,下午1:23:23 sanin.lands.model.View_ads_cls getAdDetail 问题答案: 错误在这一行 这样做

  • 问题内容: 我刚刚开始做我的第一个项目(很有趣)。我正在学习PHP和MySQL,并且已经完成了我的第一个正常工作的应用程序。它可以工作,但是我现在正在学习如何保护应用程序的安全,从而防止SQL注入。我大约有50多个PHP文件来管理与MySQL数据库的交互。它们看起来都是这样的: 这是我在整个应用程序中用于向数据库读写数据的格式。如果我需要将它们更改为准备好的语句,而不是在其中插入任何信息,而只是在

  • 我想知道使用比有什么好处? 最简单的方法是: 如您所见,我可以将数据绑定到< code>preparedStatement而无需< code>boundStatements。< code>boundStatement在哪里有用?

  • 问题内容: 我真的希望有人花一点时间查看我的代码。我正在解析一些新闻内容,并且可以将初始解析插入到包含新闻URL和标题的数据库中。我想进一步扩展它,传递每个文章链接并分析文章的内容,并将其包含在我的数据库中。初始解析完全像这样工作: 如您所见,我正在使用PHP Simple HTML DOM Parser。 为了扩展,我尝试使用mysqli语句来绑定参数,以便将所有html标记插入数据库。我之前使

  • 我有以下准备的一个准备好的声明失败了... 我在我的第一份准备好的声明中几乎有同样的准备,而且它进行得很好。我不确定是否我有两个准备好的声明,如果这是造成一个问题,或情况可能是什么? 现在我有个错误... 更新-可能的内部连接,像这样?