首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检索jpa实体属性上默认指定的最新(当前)时间值CURRENT_TIMESTAMP?

如何检索jpa实体属性上默认指定的最新(当前)时间值CURRENT_TIMESTAMP?
EN

Stack Overflow用户
提问于 2020-02-21 14:16:45
回答 1查看 559关注 0票数 1

我有一个JPA实体,它包含两个列,createdTimemodifiedTime。我希望使用MySQL的DEFAULT CURRENT_TIMESTAMP特性为这两列生成适当的时间值,因此我编写实体类如下:

代码语言:javascript
复制
@Entity
public class Blog {
    // ...

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_time", updatable = false, insertable = false, nullable = false,
        columnDefinition = "datetime default CURRENT_TIMESTAMP")
    private Date createdTime;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "modified_time", updatable = false, insertable = false, nullable = false,
        columnDefinition = "datetime default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
    private Date modifiedTime;
}

然后我对我的应用程序做了一些实验,当我检查数据库时,数据库中这两列的值被正确地更新了。

但是,当我检查BlogRepository::save返回的java实体时,这两列的值不是最新值。例如,当我插入一个新的Blog实体时,BlogRepository::save返回值上的这两个属性将为null。

我读过一些类似https://stackoverflow.com/a/12237110/8510613的文章,明白如果我将专栏标记为updatable = false,这种情况就会发生。那我该怎么解决呢?简单地删除updatable = false/insertable = false似乎没有帮助,但会触发列的null约束冲突。但是,如果删除这两列上的null约束,则这两列的值只是null。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-21 15:00:45

在这种情况下,您应该使用@生成注释。

2.3.18。生成属性 生成的属性是由数据库生成值的属性。通常,Hibernate应用程序需要刷新包含数据库生成值的任何属性的对象。但是,生成的标记属性允许应用程序将此责任委托给Hibernate。当Hibernate为已定义生成属性的实体发出select或UPDATE时,它立即发出一个选择以检索生成的值。

因此,您应该更正映射,如下所示:

代码语言:javascript
复制
@Temporal(TemporalType.TIMESTAMP)
@Generated(value = GenerationTime.INSERT)
@Column(name = "created_time", updatable = false, insertable = false, nullable = false,
        columnDefinition = "datetime default CURRENT_TIMESTAMP")
private Date createdTime;

@Temporal(TemporalType.TIMESTAMP)
@Generated(value = GenerationTime.ALWAYS)
@Column(name = "modified_time", updatable = false, insertable = false, nullable = false,
        columnDefinition = "datetime default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
private Date modifiedTime;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60340426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档