Как управлять моим элементом аудита, чтобы он сохранялся при загрузке Spring

#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
    }
}