【发布时间】:2021-11-13 03:22:20
【问题描述】:
这是我的代码部分:
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,则会引发以下异常:
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?另外请检查entity中的字段是否标注@Column(nullable=true)? -
PostgreSQL 9.2. 是的,我可以直接这样做:
insert into table_name (value_one, value_two, value_three) values ('test', 'test', NULL); -
另外,你能用
setTimestamp()代替setParameter()吗? -
很遗憾,
javax.persistence.Query没有这样的方法。是否可以将其转换为org.hibernate.Query,有这样的方法?