これは、エンティティがデフォルトでキャッシュされることを意味しますか?
JPA 1.0 はL2 キャッシュ(「共有キャッシュ」) を定義せず、JPA 1.0 はL1 キャッシュ(「トランザクション キャッシュ」) のみを定義しますが、JPA プロバイダーは共有オブジェクト キャッシュをサポートできます。これは、キャッシュ用の JPA 拡張機能(JVM ごと)を介して L1 および L2 キャッシュをサポートする TopLink Essentials の場合です。
さて、すばらしい記事TopLink Essentials(GlassFish JPA) のキャッシュの理解で説明されているように:
- 同じ永続性ユニットのすべての EntityManager は、セッション キャッシュを共有します (これが、TopLink が第 2 レベルのキャッシュを呼び出す方法です)。
- セッション キャッシュはデフォルトでオンになっています。
- 永続コンテキストにエンティティの変更/削除がある場合、それらはトランザクションがコミットされた後にセッション キャッシュに同期されるため、セッション キャッシュの状態が更新されます(または、そのようなキャッシュはまったく使用できなくなります)。
したがって、セットアップに何か他の問題があるはずです。次のプロパティを追加することで、テスト目的で (テスト目的でのみ) 共有セッション キャッシュを無効にすることができます。
<property name="toplink.cache.shared.default" value="false"/>
しかし、これで何かが変わるとは驚きです。おっしゃる通り、どこかに別の問題があると思います。
PS: これは質問の答えにはなりませんが、GlassFish v3 を使用している場合、EclipseLink を使用しないのはなぜですか?
更新: OP のコメントへの回答
したがって、従業員レコードを永続化すると、従業員のコレクションに明示的に追加するまで、データベースには表示されますが、部門内の従業員のコレクションには表示されません。これは必要なステップですか?
Java レベルでエンティティー間のリンクを作成しないと、JPA はデータベースでそれを作成できません (JPA は、ユーザーが指示したことしか実行しません)。したがって、はい、リンクを作成する必要があり、双方向の関連付けの場合は、リンクの両側を設定する必要さえあります (たとえば、employee
の従業員のコレクションに を追加し、 のDepartment
を設定しdepartment
ますEmployee
)。