Как очистить JPA Spring Data перед вызовом хранимой процедуры? - PullRequest
0 голосов
/ 18 декабря 2018

Итак, у меня есть объект 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

1 Ответ

0 голосов
/ 18 декабря 2018

Вместо использования CrudRepsitory вы можете использовать JpaRepository, который содержит метод saveAndFlush()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...