【发布时间】:2021-06-08 23:13:51
【问题描述】:
我有一个实体,其中包含一个字段来保存实体更新的日期。我正在使用以下注释:
@Temporal(TemporalType.TIMESTAMP)
@UpdateTimestamp
@Column(name = "updated_at", nullable = true)
private Date updatedAt;
我希望 null 中的 updatedAt 作为默认值,但我的默认值与创建实体的日期相同。
在我的@Service 类中,我像这样保存实体:
visitorRepository.saveAndFlush(visitor)
有没有一种方法可以使用@UpdateTimestamp 将我的updatedAt 保存为null 作为默认值?
【问题讨论】:
-
深入检查文档,但我 99% 确定这是不可能的。当您保存时,实际上它是一种更新。例如,如果您有 2 列:一列用于更新时间戳,另一列用于插入时间戳,当您保存对象并且之后没有更新时,两者将具有相同的值,
-
正是发生了什么,
createdAt和updatedAt在实体创建后具有相同的值。createdAt有@CreationTimestamp注释。 -
@UpdateTimestamp使用GenerationTiming.ALWAYS,因此始终会生成一个值(INSERT 或 UPDATE)。不确定是否可行,但不妨试试@Column(... insertable = false)。 -
不是坏行为。如果两列中的值相同(插入和更新时间戳),则表示用户没有编辑任何内容(是的,这很明显)。通常,插入时间戳被标记为不可更新。所以,你有一个简单的审计方法,¿你为什么需要更新字段为空?这是我的帮助
-
我需要返回未更新的对象列表,然后我认为可以通过该字段进行访问。同时,我将删除注释并手动处理日期。
标签: java spring-boot hibernate annotations audit