Итак, у меня есть объект JPA (скажем, Foo
), для которого FooRepository
определено как расширение CrudRepository<Foo, Long>
.В репозитории есть несколько пользовательских методов, и среди них есть метод (скажем, initFoo
), который отображается на хранимую процедуру с аннотацией @Procedure
.Теперь в слое обслуживания есть метод, который выглядит примерно так (чрезмерное упрощение):
Foo f = new Foo();
f.setId(5)
f.setName("Bar");
FooRepository.save(f);
FooRepository.initFoo(f.getId());
Вызов этого метода приводит к ошибке хранимой процедуры.После тщательной проверки (нарушение ограничения: ключ foo_id=5
не существует) выясняется, что сущность Foo
не попадает в базу данных сразу после завершения FooRepository.save()
.Скорее всего, Entity Manager решает, что нет спешки, и сохраняет сущность в памяти / кеше.
Вопрос: как убедить EM сбросить эту конкретную сущность в db?Я бы хотел избежать подключения EntityManager
на уровне сервиса и прямого вызова flush()
.Я пытался аннотировать метод хранимой процедуры с помощью @Modifying
, но, похоже, он работает только с @Query
методами.Любой здравый способ решить такую проблему?
Spring Boot (с spring-boot-starter-data-jpa) 1.3.3.RELEASE