Ответ 1
Используйте @PrePersist и @PreUpdate аннотации и напишите свой собственный прослушиватель событий.
Посмотрите этот ответ для получения более подробной информации. Он помечен как Hibernate, но применим к любому провайдеру 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;
}
}
Используйте @PrePersist и @PreUpdate аннотации и напишите свой собственный прослушиватель событий.
Посмотрите этот ответ для получения более подробной информации. Он помечен как Hibernate, но применим к любому провайдеру JPA.
Если вы используете mysql, я думаю, вы можете сделать следующее, чтобы отключить отметки времени от обновления с объекта
@Column(name = "lastUpdate", updatable= false, insertable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdate;
для оракула вам нужно установить метки времени из объекта, используя аннотацию @PreUpdate, как описано выше.
На самом деле ответ surajz работает. Рассмотрим сценарий, в котором вы отслеживаете 2 временных метки. Вы хотите вручную обновить их через объект. Вам нужно установить значение updateble=false
(то, которое вы не хотите обновлять при обновлении записи), и оставить другое бесплатно для обновлений.
Что сработало для меня.