В работе с базами данных часто нужно выяснить одни и те же вопросы:
- Когда была создана запись?
- Когда запись последний раз обновлялась?
- Кто создал запись?
Это настолько частые задачи, что их решение встроено в большинство фреймворков. В Spring Boot этот механизм называется Auditing. С его помощью мы можем автоматически записать в таблицы всю необходимую информацию.
Чтобы включить этот механизм, нужно добавить аннотацию @EnableJpaAuditing
в классе main
:
@SpringBootApplication
@EnableJpaAuditing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Затем подключаем аннотацию @EntityListeners
к отслеживаемым сущностям:
import java.time.LocalDate;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
// Остальные импорты
@Entity
@Table(name = "users")
@EntityListeners(AuditingEntityListener.class)
@Setter
@Getter
class User {
// Остальные поля
@LastModifiedDate
private LocalDate updatedAt;
@CreatedDate
private LocalDate createdAt;
}
Создание сущности приведет к заполнению createdAt
, а любое изменение — к обновлению updatedAt
.
С указанием того, кто создал сущность или последний обновлял ее, все чуть сложнее. Потому что для этой задачи механизму обновления нужно иметь доступ к текущему пользователю, то придется выполнять дополнительные действия. Мы пока не проходили аутентификацию, поэтому пропустим эту часть, но если вы хотите, то можете изучить официальную документацию.
Самостоятельная работа
На этом шаге мы научимся автоматически хранить в базе дату создания и дату последнего обновления записей.
Повторяем теорию
- Убедитесь, что у вас есть Spring-приложение с сущностями
User
иPost
. - В документации Spring Data JPA посмотрите про Auditing.
- Убедитесь, что у вас есть Spring-приложение с сущностями
Добавляем поля в сущности
В
User
иPost
добавьте поля:Пример
@CreatedDate @Column(nullable = false, updatable = false) private LocalDateTime createdAt; @LastModifiedDate private LocalDateTime updatedAt;
Аннотируйте сущности:
Пример
@Entity @EntityListeners(AuditingEntityListener.class) public class Post { ... }
Включаем аудит в приложении
В главном классе или конфигурации добавьте аннотацию:
@SpringBootApplication @EnableJpaAuditing public class Application { ... }
Проверяем работу
- Запустите приложение.
- Создайте и обновите пост или пользователя.
- Убедитесь, что поля
createdAt
иupdatedAt
заполняются автоматически.
Дополнительно
- Можно добавить отображение этих полей в API.
- Сделайте commit и запушьте проект на GitHub.
Итог: теперь каждая запись пользователя и поста автоматически хранит дату создания и дату последнего обновления.
Дополнительные материалы
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.