为了账号安全,请及时绑定邮箱和手机立即绑定

使用Hibernate和MySQL创建时间戳和最后更新时间戳

/ 猿问

使用Hibernate和MySQL创建时间戳和最后更新时间戳

慕婉清6462132 2019-10-23 14:22:14

对于某些Hibernate实体,我们需要存储其创建时间和上次更新时间。您将如何设计?

  • 您将在数据库中使用什么数据类型(假设使用MySQL,可能与JVM时区不同)?数据类型是否可以识别时区?

  • 你会在Java中使用什么数据类型(DateCalendarlong,...)?

  • 您将由谁负责设置时间戳(数据库,ORM框架(休眠)或应用程序程序员)?

  • 您将使用哪些注释进行映射(例如@Temporal)?

我不仅在寻找一个可行的解决方案,而且还在寻找一个安全且设计良好的解决方案。


查看完整描述

3 回答

?
茅侃侃

如果使用的是JPA批注,则可以使用@PrePersist和@PreUpdate事件挂钩执行此操作:


@Entity

@Table(name = "entities")    

public class Entity {

  ...


  private Date created;

  private Date updated;


  @PrePersist

  protected void onCreate() {

    created = new Date();

  }


  @PreUpdate

  protected void onUpdate() {

    updated = new Date();

  }

}

或者您可以@EntityListener在类上使用注释,并将事件代码放置在外部类中。


查看完整回答
反对 回复 2019-10-23
?
白衣非少年

您可以使用@CreationTimestamp和@UpdateTimestamp:


@CreationTimestamp

@Temporal(TemporalType.TIMESTAMP)

@Column(name = "create_date")

private Date createDate;


@UpdateTimestamp

@Temporal(TemporalType.TIMESTAMP)

@Column(name = "modify_date")

private Date modifyDate;


查看完整回答
反对 回复 2019-10-23
?
慕斯卡3215842

利用本文中的资源以及从不同来源获得的左右信息,我提出了这个优雅的解决方案,创建了以下抽象类


import java.util.Date;


import javax.persistence.Column;

import javax.persistence.MappedSuperclass;

import javax.persistence.PrePersist;

import javax.persistence.PreUpdate;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;


@MappedSuperclass

public abstract class AbstractTimestampEntity {


    @Temporal(TemporalType.TIMESTAMP)

    @Column(name = "created", nullable = false)

    private Date created;


    @Temporal(TemporalType.TIMESTAMP)

    @Column(name = "updated", nullable = false)

    private Date updated;


    @PrePersist

    protected void onCreate() {

    updated = created = new Date();

    }


    @PreUpdate

    protected void onUpdate() {

    updated = new Date();

    }

}

并让您的所有实体对其进行扩展,例如:


@Entity

@Table(name = "campaign")

public class Campaign extends AbstractTimestampEntity implements Serializable {

...

}


查看完整回答
反对 回复 2019-10-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信