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

postgresql – 如何将timestamp列映射到JPA类型?,第1张

概述我正在玩Play! 1.2.4和PostgreSQL 9.1.我创建了一个带有created_at列的表,其类型为:timestamp without time zone.它的默认值为now(). 当我使用我的Entity类为此表获取数据时,问题出现了. createdAt字段始终返回null.这是字段定义: @Column(name="created_at", insertable=false) @H_403_0@ 我正在玩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;@PrePersistprotected voID onCreate() {    createdAt = new Date();}

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

总结

以上是内存溢出为你收集整理的postgresql – 如何将timestamp列映射到JPA类型?全部内容,希望文章能够帮你解决postgresql – 如何将timestamp列映射到JPA类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1165146.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存