postgresql – 如何将timestamp列映射到JPA类型?

我正在玩Play! 1.2.4和Postgresql 9.1.我创建了一个带有created_at列的表,其类型为:timestamp without time zone.它的认值为Now().

当我使用我的Entity类为此表获取数据时,问题出现了. createdAt字段始终返回null.这是字段定义:

@Column(name="created_at",insertable=false)
public java.sql.Date createdAt;

所有其他字段都已正确填充.我尝试将字段类型更改为日期,日历,时间戳等,并尝试添加@Timestamp注释.但没有任何组合证明是成功的.

在此先感谢您的帮助!

作为参考,这是我用来创建表的DDL.

CREATE TABLE Users
(
  id serial     NOT NULL,username text NOT NULL,email text    NOT NULL,password_hash text NOT NULL DEFAULT 0,created_at timestamp without time zone DEFAULT Now(),CONSTRAINT Users_pkey PRIMARY KEY (id),CONSTRAINT Users_username_key UNIQUE (username)
);

更新:
我认为问题与使用JPA插入记录有关.数据库为created_at填充认值Now(),但是在获取该行时Hibernate不知道它是什么.

如果我查询已存在的行,则会正确填充createdAt字段!
好的……这缩小了问题的范围.

我没有完全解决问题,但我解决了这个问题.

我没有让数据库提供认值Now(),而是在JPA中用@PrePersist表达:

@Column(name="created_at",nullable=false)
@Temporal(TemporalType.TIMESTAMP)
public Date createdAt;

@PrePersist
protected void onCreate() {
    createdAt = new Date();
}

这很好用!灵感取自this answer.我仍然不确定为什么Hibernate没有使用数据库中应用的认值进行更新.它被认为价值仍然是空的.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...