上次使用JPA更新时间戳

时间:2009-11-17 00:43:30

标签: java jpa

我正在玩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;
    }


}

3 个答案:

答案 0 :(得分:16)

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

请查看this answer了解详情。它被标记为Hibernate,但适用于任何JPA提供程序。

答案 1 :(得分:2)

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

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

对于oracle,您需要使用@PreUpdate注释设置实体的时间戳,如上所述。

答案 2 :(得分:1)

实际上, surajz 回答有效。考虑一个跟踪2个时间戳的场景。您想通过实体手动更新它们。您需要将一个设置为updateble=false(更新记录时不希望更新的那个),并让另一个免费更新。

这对我有用。