更新
根据评论,它是一个使用 Spring JPA 数据的 Spring Boot 应用程序。service
班级每 5 分钟检查一次状态,其中包含一个循环。即,它实际上是在同一个事务中,即同一个会话。
因此,除非我们调用,否则refresh()
我们evict() and reload
将无法从数据库中看到更新的状态。
但问题是CrudRepository
没有公开任何refresh()
我们可以调用的方法entity manager
。
所以选项是CrudRepository
添加一个方法say refreshEntity(...)
。此方法将在内部调用entityManager.refresh()
. 最后,service
循环可以调用此refreshEntity(..)
方法并获取更新的数据。
举个例子:
public interface MyStatusRepository {
void refreshEntity(StatusEntity se);
}
public interface StatusRepository extends CrudRepository<StatusEntity, Long>, MyStatusRepository {
...
}
@Repository
public class MyStatusRepositoryImpl implements MyStatusRepository {
@PersistenceContext
private EntityManager entityManager;
@Override
public void refreshEntity(StatusEntity se); {
entityManager.refresh(se);
}
...
}
更多关于扩展存储库的信息可以在上面的链接中找到。
另一个选项是,而不是扩展,在类本身中CrudRepository
自动装配并调用它。这也有效,但会偏离现有设计。entityManager
service
refresh()