gpt4 book ai didi

postgresql - 如何将时间戳列映射到 JPA 类型?

转载 作者:行者123 更新时间:2023-11-29 11:16:53 25 4
gpt4 key购买 nike

我正在使用 Play! 1.2.4 和 PostgreSQL 9.1。我创建了一个包含 created_at 列的表,类型为:timestamp without time zone。它的默认值为 now()

当我使用我的实体类为此表获取数据时,问题就来了。 createdAt 字段总是返回 null。这是字段定义:

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

所有其他字段均已正确填充。我尝试将字段类型更改为 DateCalendarTimestamp 等,并尝试添加 @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(),而是用 @PrePersist 在 JPA 中表示:

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

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

很好用!灵感来自 this answer .我仍然不确定为什么 Hibernate 没有使用数据库中应用的默认值进行更新。它一直认为该值仍然为空。

关于postgresql - 如何将时间戳列映射到 JPA 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com