postgresql – 如何将timestamp列映射到JPA类型?
发布时间:2020-12-13 16:15:37 所属栏目:百科 来源:网络整理
导读:我正在玩Play! 1.2.4和PostgreSQL 9.1.我创建了一个带有created_at列的表,其类型为:timestamp without time zone.它的默认值为now(). 当我使用我的Entity类为此表获取数据时,问题出现了. createdAt字段始终返回null.这是字段定义: @Column(name="created_
我正在玩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) ); 更新: 如果我查询已存在的行,则会正确填充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没有使用数据库中应用的默认值进行更新.它被认为价值仍然是空的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |