Жесткое время, устанавливающее автогенерированное время с помощью аннотаций JPA спящего режима
благодаря вам, ребята, мой knowlegde в спящем режиме был улучшен dratiscally.
теперь я ударил блок здесь о current_timestamp.
вот мои коды
@Column(name="DATE_CREATED", insertable=false, updatable=false, columnDefinition="timestamp default current_timestamp")
@org.hibernate.annotations.Generated(value=GenerationTime.INSERT)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dateCreated;
@Column(name="LAST_MODIFIED", insertable=false, updatable=false, columnDefinition="datetime")
@org.hibernate.annotations.Generated(value=GenerationTime.ALWAYS)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date lastModified;
Мне нужна date_created, чтобы получить current_timestamp, и я хочу, чтобы lastmodified вставлял время для каждого обновления. Я не могу иметь 2 поля current_timestamp в одной таблице. Есть ли другие способы достичь этого? спасибо за чтение
Ответы
Ответ 1
Это не относится к Hibernate как таковому. Ваши аннотации, как указано выше, указывают Hibernate, что значения будут генерироваться базой данных и, следовательно, должны быть перезагружены после того, как объект вставлен/обновлен.
Если вы так хотите, вам нужно настроить свою базу данных (например, создав триггер), чтобы заполнить столбцы date_created
/last_modified
при необходимости.
Другой подход заключается в том, чтобы не отмечать эти поля как сгенерированные и вместо этого обновлять их в вашем Java-коде. Если вы используете JPA (через Hibernate EntityManager), это довольно тривиально, чтобы сделать это с помощью @PrePersist/@PreUpdate метод обратного вызова:
@PreUpdate
@PrePersist
public void updateTimeStamps() {
lastModified = new Date();
if (dateCreated==null) {
dateCreated = new Date();
}
}