因此,我有一个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发布
答案 0 :(得分:1)
您可以使用包含方法override func setupNavigationBar() {
navigationItem.title = .none
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
let titleLabel = UILabel()
titleLabel.text = "Home"
titleLabel.translatesAutoresizingMaskIntoConstraints = false
let targetView = self.navigationController?.navigationBar
targetView?.addSubview(titleLabel)
titleLabel.anchor(top: nil, left: nil, bottom: targetView?.bottomAnchor, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 222, height: 40)
titleLabel.centerXAnchor.constraint(equalTo: (targetView?.centerXAnchor)!).isActive = true
} else {
// Fallback on earlier versions
}
}
的{{1}}来代替CrudRepsitory