アップデート
コメントによると、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ことでした。これも同様に機能しますが、既存の設計からの逸脱になります。entityManagerservicerefresh()