Hibernate キャッシュでのキャッシュ可能なオブジェクトと領域の構成
次のステップでは、最初に XML マッピングまたは Hibernate キャッシュ アノテーションを使用してキャッシュ可能なオブジェクトと領域を設定し、次に、 ncache-hibernate.xml 以下に詳しく説明する構成ファイル。
Hibernate キャッシュを構成するための前提条件
Jakarta アノテーションを使用するには、次のパッケージをインポートしてください。
import jakarta.persistence.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import java.io.Serializable;
XML マッピング ファイルを使用してキャッシュ可能なオブジェクトを構成する
XNUMX 番目のレベルのキャッシュの使用を有効にしても、デフォルトでは各クラスのオブジェクトはキャッシュされません。 代わりに、キャッシュする必要があるクラスは、クラス マッピングの一部としてキャッシュ可能としてマークされます (.hbm.xml) ファイル。以下はマッピング ファイルのサンプルです。 order.hbm.xml キャッシュ構成を使用した休止状態キャッシュの例:
<hibernate-mapping package="com.alachisoft.ncache.sample">
<class name="Orders" table="Orders">
<cache usage="nonstrict-read-write" region="OrderRegion"/>
<id name="orderID" type="int">
<column name="OrderID"/>
<generator class="assigned"/>
</id>
<property name="orderDate" type="date">
<column name="OrderDate"/>
</property>
<property name="shippedDate" type="date">
<column name="ShippedDate"/>
</property>
<property name="shipAddress" type="string">
<column name="ShipAddress"/>
</property>
<property name="shipCountry" type="string">
<column name="ShipCountry"/>
</property>
</class>
</hibernate-mapping>
メンバー | Description |
---|---|
地域 | このクラスのオブジェクトに使用する XNUMX 次キャッシュ領域の名前を指定します。 リージョンが指定されていない場合は、完全修飾クラス名がデフォルトのリージョン構成でリージョン名として使用されます。 |
使用法 | このクラスに使用するキャッシュ同時実行方式を指定します。 Hibernate では、キャッシュに関して次の XNUMX つの同時実行戦略が可能です。 |
Hibernate キャッシュアノテーションを使用したキャッシュ可能オブジェクトの構成
Hibernate では、バージョン 3.5 以降でマッピングを定義する新しい方法が導入されました。 このメソッドは、古い XML マッピング メソッドの代替または追加として機能します。 この方法は Hibernate アノテーションとして知られています。
次のコード サンプルは、Hibernate キャッシュで Hibernate Annotations を使用する方法を示しています。
@Entity
@Table(name = "Products")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = "ProductRegion")
public class Product implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ProductID")
private int productId;
@Column(name = "ProductName")
private String productName;
@Column(name = "SupplierID")
private int supplierID;
@Column(name = "CategoryID")
private int categoryID;
@Column(name = "QuantityPerUnit")
private String quantityPerUnit;
@Column(name = "UnitPrice")
private double unitPrice;
@Column(name = "UnitsInStock")
private int unitsInStock;
@Column(name = "UnitsOnOrder")
private int unitsOnOrder;
@Column(name = "ReorderLevel")
private int reorderLevel;
@Column(name = "Discontinued")
private boolean discontinued;
// Getters
public int getProductId() {
return productId;
}
public String getProductName() {
return productName;
}
public int getSupplierID() {
return supplierID;
}
public int getCategoryID() {
return categoryID;
}
public String getQuantityPerUnit() {
return quantityPerUnit;
}
public double getUnitPrice() {
return unitPrice;
}
public int getUnitsInStock() {
return unitsInStock;
}
public int getUnitsOnOrder() {
return unitsOnOrder;
}
public int getReorderLevel() {
return reorderLevel;
}
public boolean isDiscontinued() {
return discontinued;
}
// Setters
public void setProductId(int productId) {
this.productId = productId;
}
public void setProductName(String productName) {
this.productName = productName;
}
public void setSupplierID(int supplierID) {
this.supplierID = supplierID;
}
public void setCategoryID(int categoryID) {
this.categoryID = categoryID;
}
public void setQuantityPerUnit(String quantityPerUnit) {
this.quantityPerUnit = quantityPerUnit;
}
public void setUnitPrice(double unitPrice) {
this.unitPrice = unitPrice;
}
public void setUnitsInStock(int unitsInStock) {
this.unitsInStock = unitsInStock;
}
public void setUnitsOnOrder(int unitsOnOrder) {
this.unitsOnOrder = unitsOnOrder;
}
public void setReorderLevel(int reorderLevel) {
this.reorderLevel = reorderLevel;
}
public void setDiscontinued(boolean discontinued) {
this.discontinued = discontinued;
}
public Product() {
// Default constructor required by Hibernate
}
}
注釈 | Description |
---|---|
エンティティ | このアノテーションは、クラスを Entity Bean としてマークします。 このクラスには少なくともパッケージ スコープが必要です。 |
hibernate.annotations.キャッシュ | このアノテーションは、メソッド (またはクラス内のすべてのメソッド) を呼び出した結果をキャッシュできることを示します。 |
表 | このアノテーションを使用すると、エンティティをデータベースに永続化するために使用するテーブルの詳細を定義できます。 |
Id | Entity Bean の主キーには @Id アノテーションが付けられます。 テーブル構造に応じて、これは単一フィールドまたは複数フィールドの組み合わせのいずれかになります。 |
生成された価値 | このアノテーションは、主キー (@Id) 値を自動的に生成するために使用されます。 |
コラム | この注釈は、プロパティまたはフィールドがマップされる列のプロパティを指定します。 これには次の属性があります。 |
ジョブの設定方法については、 Hibernate のドキュメント Hibernate アノテーションとキャッシュ戦略の詳細については、「Hibernate アノテーションとキャッシュ戦略」を参照してください。
キャッシュ領域を構成する方法
Hibernate はキャッシュ領域を使用してオブジェクトを保存します。 NCache キャッシュ領域をさまざまなプロパティで構成できます。 この目的のために、 NCache という名前の設定ファイルがあります ncache-hibernate.xmlこれには、すべてのリージョンの構成と、によって使用されるその他の関連構成が含まれます。 NCache。 このファイルは、アプリケーションのルート ディレクトリまたはアプリケーションの config フォルダーに配置できます。 NCache インストールディレクトリ。
以下はサンプルです ncache-hibernate.xml 設定ファイル:
<configuration>
<application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false">
<cache-regions>
<region name="ProductRegion" cache-name="demoCache" priority="BelowNormal" expiration-type="Absolute" expiration-period="8"/>
<region name="OrderRegion" cache-name="demoCache" priority="Normal" expiration-type="Sliding" expiration-period="8"/>
<region name="DefaultRegion" cache-name="demoCache" priority="default" expiration-type="None" expiration-period="0"/>
</cache-regions>
<database-dependencies>
<dependency entity-name="Products" type="oledb" sql-statement="SELECT ProductID FROM Products WHERE ProductID ='?';" cache-key-format="Products#[pk]" connection-string="Provider=SQLOLEDB;Data Source=20.200.20.40,1433;Initial Catalog=Northwind;User ID=john;Password=1234;"/>
<dependency entity-name="Orders" type="oledb" sql-statement="SELECT OrderID FROM Orders WHERE OrderID ='?';" cache-key-format="Orders#[pk]" connection-string="Provider=SQLOLEDB;Data Source=20.200.20.40,1433;Initial Catalog=Northwind;User ID=john;Password=1234;"/>
</database-dependencies>
</application-config>
</configuration>
アプリケーション構成: このセクションでは、を使用するための構成を指定できます。 NCache 特定のアプリケーション向け。 複数のアプリケーション構成を指定できます。 ncache-hibernate.xml。 すべての Hibernate アプリケーションは、に基づいて指定された構成の XNUMX つを使用します。 アプリケーションID Hibernate の設定ファイルで指定されます。 以下は、application-config セクションで設定可能なオプションです。
メンバー | Description |
---|---|
アプリケーションID | このオプションを使用すると、現在の ID の一意の ID を指定できます。 アプリケーション構成。 この ID は、特定のアプリケーションに適切な構成を選択するために使用されます。 |
キャッシュ例外を有効にする | 例外が発生したかどうかを識別します。 NCache、Hibernate プロバイダーに伝播されます。 |
デフォルト-地域名 | ユーザーがアプリケーションのデフォルトのリージョンを指定できるようにします。 特定のリージョンの構成が見つからない場合は、デフォルトのリージョンの構成が使用されます。 指定されたデフォルト リージョンの構成は、cache-region セクションに存在する必要があります。 |
キーの大文字と小文字の区別 | このオプションを使用すると、ユーザーはキャッシュ キーで大文字と小文字を区別するかどうかを指定できます。 このオプションは、使用するデータベースに応じて設定する必要があります。 データベースで大文字と小文字が区別される場合は、このオプションを true に設定し、それ以外の場合は false に設定します。 |
キャッシュリージョン | このセクションでは、Hibernate アプリケーションの複数のキャッシュ領域を構成できます。 各リージョンの構成はリージョンタグで指定されます。 |
地域 | このタグには、XNUMX つの特定の領域の構成が含まれています。 次のオプションは、特定のリージョンに対して構成できます。 名前: 各地域はその名前によって識別されます。 リージョンの名前は一意である必要があります。 キャッシュ名: このオプションを使用すると、ユーザーは次のことを指定できます。 NCacheこの領域に使用する のキャッシュ名。 優先: キャッシュされたアイテムに使用する優先度。 可能な値は次のとおりです。 Default Low BelowNormal Normal AboveNormal High NotRemovable 有効期限タイプ: このオプションを使用すると、ユーザーはこのリージョン内のアイテムの有効期限のタイプを指定できます。 可能な値は、絶対/スライド/なしです。 有効期限: このオプションを使用すると、絶対/スライド有効期限が設定されている場合に、ユーザーが有効期限を指定できます。 その値は 0 より大きい必要があります。デフォルトの単位は秒です。 |
データベースの依存関係 | このセクションでは、現在の Hibernate アプリケーションのデータベース依存関係を指定できます。 依存: 各依存関係は依存関係タグで構成されます。 複数の依存関係に対して複数のタグを構成できます。 依存関係ごとに次のオプションを構成できます。 エンティティ名: 依存関係は、クラスの完全修飾名に従って追加されます。 このオプションを使用すると、ユーザーは現在の依存関係を追加するクラスの名前を指定できます。 どのエンティティも最大 XNUMX つの依存関係を持つことができます。 タイプ: このオプションを使用すると、ユーザーはデータベースの依存関係のタイプを指定できます。 可能な値は oracle/oledb です。 以来、 NCache プロバイダーは Hibernate の設定で指定された接続文字列を使用するため、接続文字列に適切な依存関係の種類を使用します。 SQL ステートメント: ユーザーが構築に使用する SQL ステートメントを指定できるようにします。 NCacheのデータベース依存関係。 キャッシュキーの形式: このオプションは、現在のエンティティ タイプのアイテムのキャッシュ キー形式を構成します。 キャッシュ キーの形式には「[pk]」が含まれている必要があります。これはレコードの主キーに置き換えられます。 また、エンティティ名に置き換えられる「[en]」が含まれる場合もあります。 キャッシュキー形式のデフォルト値は「[en]#[pk]」です。 OleDb データベースに依存する場合は、データベース トリガーを作成するときに同じキャッシュ キー形式を使用する必要があります。 見る NCache OleDb 依存関係のデータベース トリガーを作成するためのヘルプ。 複合キーセパレーター: 現在のエンティティのレコードに主キーとして複合キーがある場合、キャッシュ キーは、複合キー区切り文字で区切られたすべてのキーを組み合わせて形成されます。 複合キー区切り文字は XNUMX 文字の長さである必要があります。 デフォルト値は「$」です。 |
も参照してください
キャッシュを初期化する
キャッシュでの追加/更新
Hibernateの第XNUMXレベルのキャッシュ
Hibernateアプリケーションを構成する
クエリキャッシュを使用する