当前位置: 首页 > 面试题库 >

JPA本机查询设置null参数

楚望
2023-03-14
问题内容

这是我的代码部分:

Query q = em.createNativeQuery("insert into table_name (value_one, value_two, value_three) values (?,?,?)");
q.setParameter(1, value1);
q.setParameter(2, value2);
q.setParameter(3, value3);
q.executeUpdate();

value3有时可以为null(Date类对象)。如果为null,则会引发以下异常:

  Caused by: org.postgresql.util.PSQLException: ERROR: column "value_three" is of type timestamp without time zone but expression is of type bytea
  Hint: You will need to rewrite or cast the expression.
  Position: 88
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:189)
    ... 11 more

如何使此代码正常工作并将null值持久保存到数据库中?


问题答案:

您正在使用postgresql(已经在堆栈中进行了说明),并且可能正在使用Hibernate,几乎可以肯定会遇到此问题:PostgreSQL JDBCNull String作为bytea

因此,这意味着转义到Hibernate API,以便您可以指定表达式的类型。

在我的情况下,它是可为空的Short,所以我使用了:

.setParameter("short", shortValue, ShortType.INSTANCE);

shortValue类型Short



 类似资料:
  • 每当我的primaryGrpId为null时,以下本机查询就会因SQLGrammerException而失败,因为它需要数字。Andy知道如何在JPA中使用本机查询将参数值设置为NULL。数据库是ORACLE。 由以下原因引起:java.sql.SQLSynaxErrorException: ORA-00932:不一致的数据类型:预期的数字得到了二进制 我所有的DAO方法都只是声明的,没有提供任何

  • 问题内容: 我正在尝试做: 但是我得到了IllegalArgumentException,它告诉我参数超出范围。我究竟做错了什么? 问题答案: 参数周围不应有引号。尝试以下方法: 您可能还需要仔细检查您的真实意思,因为这可能并没有按照您的想象做。

  • 当使用jpa本机查询 事务传播是我们正在使用的正确jpa的唯一特性吗? 在我的意见中,我就像使用普通的旧jdbc pluc jpa事务传播 我正在阅读PRO JPA一书,根据我的理解 当我们使用JPA本机查询获取一组标量值时(与我们使用jdbc的方式很相似),实际上没有托管实体和持久性上下文的概念。当我们通过本机查询检索实体时,情况会发生变化。

  • 问题内容: 我正在使用Hibernate / JPA执行本地PostGIS查询。这些查询的问题在于它们需要的参数不是经典的X =“值”形式。 例如,以下几行崩溃 但是,以下查询有效: (但是它很容易出现SQL注入…) 有谁知道如何在这种情况下使用? 问题答案: 未为本机查询定义使用命名参数。根据JPA规范(第3.6.3节“ 命名参数”): 命名参数遵循第4.4.1节中定义的标识符规则。命名参数的使

  • 问题内容: 假设上一课,您如何找到具有特定电子邮件地址的? 这样做简单吗,还是有适当的方法? 问题答案: 那并没那么简单。JPQL 为此提供了运营商: “旧”方式(类似于SQL)是:

  • 我有一个服务类,它通过使用< code > carrepository . retrieve cars()调用JPA存储库来接收汽车列表。存储库方法使用本地查询来检索记录。 现在我想传递参数< code > carrepository . retrieve cars(Long vinNo,Long serialNo)并在查询中使用它们。我假设我会需要一些东西作为准备好的陈述。然而,我不知道如何实现