localdatetime jpa 2.2的空值-postgresql

zbdgwd5y  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(484)

我无法为下面描述的字段设置空值。我想插入null作为默认值。

@Column(name = "answer_date",columnDefinition = "TIMESTAMP")
private LocalDateTime answerDate

当我设置null时,它显示以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: column "answer_date" is of type timestamp without time zone but expression is of type character varying

我使用eclipselink作为jpa实现。

k3fezbri

k3fezbri1#

我认为这是一个众所周知的问题。参考链接
https://bugs.eclipse.org/bugs/show_bug.cgi?id=535431 -臭虫引起的
https://bugs.eclipse.org/bugs/show_bug.cgi?id=546312 -bug已修复
https://www.postgresql.org/messageid/200412101610.16959.scrawford%40pinpointresearch.com
https://github.com/typeorm/typeorm/issues/2290
(typeorm也面临同样的问题)。
是的,错误消息来自postgresjdbc驱动程序。此错误的原因是eclipselink使用varchar作为'null'值的数据类型。其他驱动程序可能会也可能不会忽略这个错误的数据类型,postgres驱动程序不会。
当您试图将answerdate设置为null时,它会变成一个“null”字符串,提交给postgres数据库,并导致此错误,因为“null”不是有效的时间戳格式。
如果在localdatetime不存在的情况下指定一个默认值会更好。

private LocalDateTime answerDate = LocalDateTime.now();

在本例中,此错误消息表示“属于时间戳类型。。。但表达式的类型为文本..“可以避免。
更新错误在eclipselink版本2.7.6中修复(https://github.com/eclipse-ee4j/eclipselink/pull/415)

相关问题