代码之家  ›  专栏  ›  技术社区  ›  nos

上次更新时间戳与JPA

  •  12
  • nos  · 技术社区  · 16 年前

    我在玩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 回复  |  直到 13 年前
        1
  •  16
  •   Community Mohan Dere    8 年前

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

    看一看 this answer 详情。它被标记为Hibernate,但适用于任何JPA提供者。

        2
  •  2
  •   surajz    16 年前

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

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

    对于Oracle,时间必须使用@preupdate annotation从实体设置时间戳,如上所述。

        3
  •  1
  •   Marko cyn    13 年前

    事实上, 苏拉兹 回答工作。考虑一个跟踪2个时间戳的场景。您希望通过实体手动更新它们。你需要设置一个 updateble=false (更新记录时不希望更新的一个),并让另一个自由更新。

    这就是我的工作。