JPA本机查询设置null参数

这是我的代码部分:

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

以上是 JPA本机查询设置null参数 的全部内容, 来源链接: utcz.com/qa/413778.html

回到顶部