5.12. JPA キャッシュストア
この実装は、エンティティーメタモデルにアクセスする JPA 2.0 仕様によって異なります。
通常のユースケースでは、JPA 秒レベルキャッシュやクエリーキャッシュに Red Hat Data Grid を利用することが推奨されます。ただし、Red Hat Data Grid API のみを使用し、一般的な形式(明確に定義されたスキーマを持つデータベースなど)を使用して Red Hat Data Grid をキャッシュストアに永続化したい場合は、JPA Cache Store が適切になる可能性があります。
留意すべき点
- JPA キャッシュストアを使用する場合、キーはエンティティーの ID で、値はエンティティーオブジェクトである必要があります。
-
@Idまたは@EmbeddedIdアノテーションがついたプロパティーのみが許可されます。 - 自動生成される ID はサポートされません。
- 最後に、すべてのエントリーは immortal エントリーとして保存されます。
5.12.1. 使用例 リンクのコピーリンクがクリップボードにコピーされました!
たとえば、永続ユニット "myPersistenceUnit" と JPA エンティティー User があるとします。
persistence.xml
<persistence-unit name="myPersistenceUnit"> ... </persistence-unit>
<persistence-unit name="myPersistenceUnit">
...
</persistence-unit>
ユーザーエンティティークラス
User.java
キャッシュ「usersCache」を設定して JPA キャッシュストアを使用するように設定できます。これにより、データをキャッシュに配置すると、JPA 設定を基にデータがデータベースに永続化されます。
通常、単一の Red Hat Data Grid キャッシュは複数のタイプのキーと値のペアを保存できます。以下に例を示します。
Cache<String, User> usersCache = cacheManager.getCache("myCache");
usersCache.put("raytsang", new User());
Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myCache");
teachersCache.put(1, new Teacher());
Cache<String, User> usersCache = cacheManager.getCache("myCache");
usersCache.put("raytsang", new User());
Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myCache");
teachersCache.put(1, new Teacher());
キャッシュが JPA キャッシュストアを使用するように設定されている場合、キャッシュは ONE タイプのデータのみを保存できることに注意してください。
Cache<String, User> usersCache = cacheManager.getCache("myJPACache"); // configured for User entity class
usersCache.put("raytsang", new User());
Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myJPACache"); // cannot do this when this cache is configured to use a JPA cache store
teachersCache.put(1, new Teacher());
Cache<String, User> usersCache = cacheManager.getCache("myJPACache"); // configured for User entity class
usersCache.put("raytsang", new User());
Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myJPACache"); // cannot do this when this cache is configured to use a JPA cache store
teachersCache.put(1, new Teacher());
複合キーを使用できるように @EmbeddedId の使用がサポートされています。
最後に、自動生成される ID (例: @GeneratedValue)はサポートされていません。JPA キャッシュストアを使用してキャッシュに何かを配置する場合、キーは ID の値である必要があります。