6.14. JPA キャッシュストア
JPA (Java Persistence API) キャッシュストア、JpaStore
は正式なスキーマを使用してデータを永続化します。
その後、他のアプリケーションは永続ストレージから読み取れ、Data Grid からデータを読み込むことができます。ただし、他のアプリケーションは、Data Grid と同時に永続ストレージを使用しないでください。
JPA キャッシュストアを使用する際には、以下の点を考慮する必要があります。
- キーはエンティティーの ID である必要があります。値はエンティティーオブジェクトにする必要があります。
-
1 つの
@Id
または@EmbeddedId
アノテーションのみが許可されます。 -
@GeneratedValue
アノテーションを使用した自動生成 ID はサポートされません。 - すべてのエントリーは immortal として保存されます。
- JPA のキャッシュストアは、セグメント化をサポートしていません。
Data Grid キャッシュを組み込んだ JPA キャッシュストアのみを使用する必要があります。
JPA キャッシュストアの設定
XML
<local-cache name="vehicleCache"> <persistence passivation="false"> <jpa-store xmlns="urn:infinispan:config:store:jpa:13.0" persistence-unit="org.infinispan.persistence.jpa.configurationTest" entity-class="org.infinispan.persistence.jpa.entity.Vehicle"> /> </persistence> </local-cache>
ConfigurationBuilder
Configuration cacheConfig = new ConfigurationBuilder().persistence() .addStore(JpaStoreConfigurationBuilder.class) .persistenceUnitName("org.infinispan.loaders.jpa.configurationTest") .entityClass(User.class) .build();
設定パラメーター
宣言型 | プログラマティック | 詳細 |
---|---|---|
|
|
JPA エンティティークラスを含む JPA 設定ファイル |
|
| このキャッシュに保存されることが想定される完全修飾 JPA エンティティークラス名を指定します。1 つのクラスのみが許可されます。 |
6.14.1. JPA キャッシュストアの例
このセクションでは、JPA キャッシュストアを使用する例を紹介します。
前提条件
- JPA エンティティーをマーシャリングするように Data Grid を設定します。
手順
永続性ユニット "myPersistenceUnit" を
persistence.xml
で定義します。<persistence-unit name="myPersistenceUnit"> <!-- Persistence configuration goes here. --> </persistence-unit>
ユーザーエンティティークラスを作成します。
@Entity public class User implements Serializable { @Id private String username; private String firstName; private String lastName; ... }
JPA キャッシュストアで"usersCache"という名前のキャッシュを設定します。
キャッシュ usersCache を設定して JPA キャッシュストアを使用するように設定できます。これにより、データをキャッシュに配置すると、JPA 設定を基にデータがデータベースに永続化されます。
EmbeddedCacheManager cacheManager = ...; Configuration cacheConfig = new ConfigurationBuilder().persistence() .addStore(JpaStoreConfigurationBuilder.class) .persistenceUnitName("org.infinispan.loaders.jpa.configurationTest") .entityClass(User.class) .build(); cacheManager.defineCache("usersCache", cacheConfig); Cache<String, User> usersCache = cacheManager.getCache("usersCache"); usersCache.put("raytsang", new User(...));
JPA キャッシュストアを使用するキャッシュは、以下の例のように、1 種類のデータのみを保存できます。
Cache<String, User> usersCache = cacheManager.getCache("myJPACache"); // Cache is configured for the User entity class usersCache.put("username", new User()); // Cannot configure caches to use another entity class with JPA cache stores Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myJPACache"); teachersCache.put(1, new Teacher()); // The put request does not work for the Teacher entity class
@EmbeddedId
アノテーションでは、以下の例のように複合キーを使用できます。@Entity public class Vehicle implements Serializable { @EmbeddedId private VehicleId id; private String color; ... } @Embeddable public class VehicleId implements Serializable { private String state; private String licensePlate; ... }
関連資料