Контекст: Я реализовал Spring Boot JpaRepostory
, который хранит Entity
со столбцом, имеющим уникальное ограничение. Наилучший способ, который я нашел, когда пользователь пытается записать уже существующую запись (совершенно нормальная и ожидаемая операция), - это поместить вызов репозитория в блок try/catch
и проглотить исключение. Это действительно прекрасно работает. Однако ..
Проблема: Вызовы JpaRepository
, которые нарушают уникальное ограничение, записывают массу предупреждений / ошибок, которые загромождают консоль. Этот сценарий является ожидаемым и обрабатывается, поэтому я не хочу, чтобы репозиторий регистрировал предупреждения / ошибки.
Вопрос: Как я могу отключить ведение журнала только для одного конкретного c метода call (repository.save)?
Сущность:
@Data
@Entity
public class Product {
@Id @GeneratedValue
private Long id;
@Column(unique = true)
private String name;
public Product(String name) {
this.name = name;
}
}
Репозиторий:
public interface ProductRepository extends JpaRepository<Product, Long> { };
Служба:
@Service
public class ProductService {
private final ProductRepository repository;
public ProductService(ProductRepository repository) {
this.repository = repository;
}
@Override
public Sentence addProduct(String name) {
try {
// this call will throw an exception and log the error if a Product with name already exists
// I'd like to disable the logging for this one call only
repository.save(new Product(name));
} catch (DataIntegrityViolationException ex) {
// handle error here and swallow the exception
}
}
нежелательные журналы, созданные при звонке на repository.save
(повторяются тысячи раз):
insert into product (name, id) values (?, ?) [23505-200]
2020-08-01 19:41:18.342 WARN 8320 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 23505, SQLState: 23505
2020-08-01 19:41:18.342 ERROR 8320 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Unique index or primary key violation: "PUBLIC.UK_Q48233U3FH44JLOTUJWMDQ967_INDEX_2 ON PUBLIC.PRODUCT(PRODUCT) VALUES 1674"; SQL statement: