ある APPlication でいくつかのデータを更新し、JMS イベントを別の JBOSS サーバーに送信しようとしています。リスナーはイベントを取得し、データベース ビューと dblink を使用してデータを読み取ろうとします。
最初、このビューにはその ID のデータがありません。他のアプリケーションを使用してデータを更新し、コミット後に JMS イベントがその ID で送信されます。リスナーがこの ID を受け取ると、データベース ビューを使用してデータをフェッチします。
私の問題は、JPA/HIBERNATE を使用して読み取りを行っているときに、まだ空白になっている古いデータを読み取り続けていることです。
dao レイヤーを呼び出すサービス レイヤーは、次のトランザクションを使用しています。
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
The DAO Layer is using
@PersistenceContext
private EntityManager em;
Query query = em.createNativeQuery(sbQuery.toString());
次のすべてのオプションを試してみましたが、うまくいかないようです。
em.clear();
em.getEntityManagerFactory().getCache().evictAll();
em.flush();
query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.BYPASS);
注:それが機能する唯一の方法は、イベントを受け取った後、スターライトjdbcを実行すると、そのビューからデータを取得できますが、Spring / Hibernate構成では空白になります。
通常の動作で機能しない理由と、呼び出しに対してスターライト jdbc を実行する必要があるのはなぜですか?