Подтвердить что ты не робот

Жесткое время, устанавливающее автогенерированное время с помощью аннотаций 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 в одной таблице. Есть ли другие способы достичь этого? спасибо за чтение

4b9b3361

Ответ 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();
    }
}