使用 JPA 的上次更新时间时间戳

2022-09-04 19:28:48

我正在玩一下JPA(具体来说就是Eclipselink)。下面的实体有一个时间戳,该时间戳应反映该实体上次更新的时间。

每次更改此实体时,使JPA自动更新时间戳的策略是什么?

如果我还想要一个“创建”时间戳,仅在实体首次持久化时设置,并且永远不允许再次更改,我该怎么办?

 @Entity
 public class Item implements Serializable {
     private static final long serialVersionUID = 1L;
     private Integer id;
     private String note;


    public Item () {
    }


    @Id
    @GeneratedValue(strategy=SEQUENCE)
    @Column(unique=true, nullable=false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }


    @Column(length=255)
    @Column(nullable=false)
    public String getNote() {
        return this.note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    @Column(nullable=false)
    public Timestamp getUpdated() {
        return this.updated;
    }

    public void setUpdated(Timestamp updated) {
        this.updated = updated;
    }


}

答案 1

使用@PrePersist@PreUpdate注释,并编写自己的事件侦听器。

有关详细信息,请查看此答案。它被标记为Hibernate,但适用于任何JPA提供程序。


答案 2

如果您使用的是mysql,我认为您可以执行以下操作来禁止从实体更新时间戳

@Column(name = "lastUpdate", updatable= false, insertable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdate;

对于预言机,您必须使用@PreUpdate注释设置实体的时间戳,如上所述。


推荐