首页 > 解决方案 > 如何在调用存储过程之前刷新 Spring Data JPA?

问题描述

所以我有 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()。很可能实体管理器决定不急于将实体保存在内存/缓存中。

问题是:如何说服 EM 将该特定实体刷新到 db?我想避免EntityManager在服务层接线并直接调用flush()。我试过用 注释存储过程方法@Modifying,但它似乎只适用于@Query方法。有什么理智的方法可以解决此类问题?

Spring Boot(带有 spring-boot-starter-data-jpa)1.3.3.RELEASE

标签: javaspringspring-bootspring-data-jpa

解决方案


而不是使用CrudRepsitory你可以使用JpaRepositorywhich contains 方法saveAndFlush()


推荐阅读