Дата последнего обновления с 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;
    }


}

Ответы

Ответ 1

Используйте @PrePersist и @PreUpdate аннотации и напишите свой собственный прослушиватель событий.

Посмотрите этот ответ для получения более подробной информации. Он помечен как Hibernate, но применим к любому провайдеру JPA.

Ответ 2

Если вы используете mysql, я думаю, вы можете сделать следующее, чтобы отключить отметки времени от обновления с объекта

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

для оракула вам нужно установить метки времени из объекта, используя аннотацию @PreUpdate, как описано выше.

Ответ 3

На самом деле ответ surajz работает. Рассмотрим сценарий, в котором вы отслеживаете 2 временных метки. Вы хотите вручную обновить их через объект. Вам нужно установить значение updateble=false (то, которое вы не хотите обновлять при обновлении записи), и оставить другое бесплатно для обновлений.

Что сработало для меня.