#spring #spring-boot #jpa #spring-data-jpa #audit
#весна #spring-boot #jpa #spring-data-jpa #аудит
Вопрос:
Я использую Spring Boot и JpaRepository для сохранения моих данных. Но мне нужен способ проверки моих запросов jpa.
Проблема в том. Я хочу получить событие, сгенерированное в момент выполнения запроса, и заставить объект сохраняться, а старый объект и манипулировать им, чтобы он сохранялся в пользовательской таблице аудита. Я не хочу использовать структуру по умолчанию для аудита. Например, @JaversSpringDataAuditable сохраняет аудит в определенной структуре таблиц. Я не хочу этого, я просто хочу получить структуру в перехватчике или что-то в этом роде и манипулировать ею, чтобы сохранить мою конкретную структуру
Ответ №1:
Не совсем ясно, чего именно вы хотите достичь. Поэтому я упомяну несколько простых способов аудита в Spring Boot, которые, надеюсь, помогут.
Для аудита взаимодействий JPA вы можете включить аудит JPA для аннотации @EnableJpaAuditing
в @Config
классе. Вы можете сделать объект доступным для проверки с помощью аннотации @EntityListeners(AuditingEntityListener.class)
. Затем информация аудита будет записана, когда объект entity будет сохранен или обновлен.
Такой аннотированный объект может, например, хранить @CreatedDate
or @LastModifiedDate
. Для получения дополнительной информации вы можете ознакомиться с документацией Spring .
@Entity
@EntityListeners(AuditingEntityListener.class)
public class ExampleEntity {
//...
@Column(name = "created_date", nullable = false, updatable = false)
@CreatedDate
private long createdDate;
@Column(name = "modified_date")
@LastModifiedDate
private long modifiedDate;
//...
}
Если вы хотите выполнить некоторые действия до того, как объект будет сохранен или обновлен, вы можете использовать аннотации @PrePersist
и @PreUpdate
( @PreRemove
также доступно, но, похоже, не требуется).
@Entity
public class Example Entity {
//...
@PrePersist
public void onPrePersist() {
// Do something before entity is persisted
}
@PreUpdate
public void onPreUpdate() {
// Do something before entity is updated
}
}