【发布时间】:2019-05-19 06:29:22
【问题描述】:
所以我有 JPA 实体(比如说Foo),其中有FooRepository 定义为CrudRepository<Foo, Long> 的扩展。 Repository 几乎没有自定义方法,其中有一个方法(比如说initFoo)映射到带有@Procedure 注释的存储过程。现在在服务层有一个看起来很像这样的方法(过度简化):
Foo f = new Foo();
f.setId(5)
f.setName("Bar");
FooRepository.save(f);
FooRepository.initFoo(f.getId());
调用此方法会导致存储过程出错。经过仔细检查(违反约束:键foo_id=5 不存在),在FooRepository.save() 完成后,实体Foo 不会立即出现在数据库中。很可能实体管理器决定不急于将实体保存在内存/缓存中。
问题是:如何说服 EM 将该特定实体刷新到 db?我想避免在服务层连接EntityManager 并直接调用flush()。我试过用@Modifying注释存储过程方法,但它似乎只适用于@Query方法。有什么理智的方法可以解决此类问题?
Spring Boot(带有 spring-boot-starter-data-jpa)1.3.3.RELEASE
【问题讨论】:
标签: java spring spring-boot spring-data-jpa