gpt4 book ai didi

java - JPA Native Query 设置空参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:55 24 4
gpt4 key购买 nike

这是我的代码部分:

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 类对象)。如果它为空,则抛出以下异常:

  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

如何让这段代码正常工作并将空值持久化到数据库中?

最佳答案

我在使用 EntityManager.createNamedQuery 时遇到了同样的问题(猜猜 createNativeQuery 也是同样的问题)。

如果您要将 nullable 参数传递给 Query,则使用允许传递类型的 TypedParameterValue。

例如:

setParameter("paramName", new TypedParameterValue(StandardBasicTypes.LONG, paramValue));

在这里,您明确设置了传递值的类型,当您传递 null 值时,处理器知道确切的类型。

关于java - JPA Native Query 设置空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com