Oracle10g (データソース) + Weblogic 10.3 + Eclipselink に基づくシステムがあります。
DAO を使用して Java ソフトウェアを介してデータを挿入または削除すると、すべてのデータがすぐに利用可能になりますが、(SqlDeveloper または java.sql.Connection クラスを使用して) 手動でデータを挿入すると、新しいデータはデータベースから取り込まれません。
なぜそれが起こるのですか?そして、それを修正する方法は?
Oracle10g (データソース) + Weblogic 10.3 + Eclipselink に基づくシステムがあります。
DAO を使用して Java ソフトウェアを介してデータを挿入または削除すると、すべてのデータがすぐに利用可能になりますが、(SqlDeveloper または java.sql.Connection クラスを使用して) 手動でデータを挿入すると、新しいデータはデータベースから取り込まれません。
なぜそれが起こるのですか?そして、それを修正する方法は?
これは、他の方法でデータベースに変更が加えられたことをEclipseLinkが認識できないために発生します。外部ツールは変更についてEclipseLinkに通知せず、EclipseLinkは可能な変更についてデータベース・コンテンツを常にポーリングしているわけではありません。そのような実装は、パフォーマンスを低下させます。JPQL やネイティブ SQL の DELETE および INSERT クエリなど、JPA 一括操作を介して行われた変更でも同じことが起こります。
問題を実際に解決することはできませんが、共有キャッシュをオフにすると、問題との共存が容易になります。パフォーマンスが低下する可能性があることに注意してください。
JPA 1 の場合:
<property name="eclipselink.cache.shared.default" value="false"/>
そしてJPA 2では:
<shared-cache-mode>NONE</shared-cache-mode>
共有キャッシュの追加として、EntityManager もキャッシュを維持します。単一のエンティティは、 refreshメソッドを使用してデータベースから更新できます。