【问题标题】:Java EntityManager merge and @PrePersistJava EntityManager 合并和@PrePersist
【发布时间】:2012-07-06 09:46:48
【问题描述】:

我用这条线来合并:

partner = em.merge(partner);

这是在我的实体中:

@PrePersist
public void updateModificationDate(){
    this.lastModificationDate = new Date();
}

如您所见,我想跟上实体上次更改的时间,

但该方法永远不会被调用,

有人知道我能做什么吗?

【问题讨论】:

    标签: java entity entitymanager


    【解决方案1】:

    您可以向您的实体添加以下注释:

    @EntityListeners(SaveOrUpdateDateListener.class)
    

    实际上听众是:

    public class SaveOrUpdateDateListener {
    
        @PrePersist
        @PreUpdate
        public void setDate(final CertApplication entity) {
            final Date now = new Date();
            entity.setUpdated(now);
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以阅读this 并了解为什么不调用 prepersist。另外我认为您可以使用@Version 注释来保持实体的最后修改日期。

      【讨论】:

      • 但我想使用日期作为 lostmodificationdate。我该如何解决这个问题?
      • 你可以这样使用日期:@Version @Temporal(TemporalType.TIMESTAMP) @Column(name = "UPD_ON", nullable = false) private Date updatedOn;
      【解决方案3】:

      尝试强制 em.flush() 但我不太确定强制刷新是否是一个好习惯。

      【讨论】:

        猜你喜欢
        • 2011-07-13
        • 1970-01-01
        • 2023-03-23
        • 2015-05-25
        • 2018-01-09
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2015-05-16
        相关资源
        最近更新 更多