Configurar objetos e regiões armazenáveis em cache no cache do Hibernate
A próxima etapa é configurar objetos e regiões armazenáveis em cache usando primeiro Mapeamento XML ou Anotações de Cache do Hibernate e depois editar o ncache-hibernate.xml arquivo de configuração conforme detalhado abaixo.
Pré-requisitos para configurar o cache do Hibernate
Importe os seguintes pacotes para usar anotações de Jacarta:
import jakarta.persistence.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import java.io.Serializable;
Configurar objetos armazenáveis em cache usando arquivo de mapeamento XML
Habilitar o uso de um cache de segundo nível não armazena em cache o objeto de cada classe por padrão. Em vez disso, as classes que precisam ser armazenadas em cache são marcadas como armazenáveis em cache como parte do mapeamento de classes (.hbm.xml) arquivo. A seguir está um exemplo de arquivo de mapeamento pedidos.hbm.xml do cache de hibernação com configuração de cache:
<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>
Membros | Descrição |
---|---|
Região | Especifica o nome da região de cache de segundo nível a ser usada para os objetos desta classe. Se nenhuma região for especificada, um nome de classe totalmente qualificado será usado como nome da região com configurações de região padrão. |
Uso | Especifica a estratégia de simultaneidade de cache a ser usada para esta classe. O Hibernate permite as seguintes três estratégias de simultaneidade para armazenamento em cache: |
Configurar objetos armazenáveis em cache usando anotações de cache do Hibernate
O Hibernate introduziu um novo método para definir mapeamentos da versão 3.5 em diante. Este método atua como uma substituição ou uma adição ao antigo método de mapeamento XML. Este método é conhecido como Anotações de Hibernação.
O exemplo de código a seguir demonstra como você pode usar anotações do Hibernate em seu cache de hibernação.
@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
}
}
Anotações | Descrição |
---|---|
Entidade | Esta anotação marca uma classe como um Entity Bean. Esta classe deve ter pelo menos um escopo de pacote. |
hibernate.annotations.Cache | Esta anotação indica que o resultado da invocação de um método (ou de todos os métodos de uma classe) pode ser armazenado em cache. |
mesa | Esta anotação permite definir os detalhes da tabela a ser usada para persistir a entidade no banco de dados. |
Id | A chave primária do seu Entity Bean é anotada com a anotação @Id. Dependendo da estrutura da sua tabela, pode ser um único campo ou uma combinação de vários campos. |
Valor gerado | Esta anotação é usada para gerar automaticamente os valores da chave primária (@Id). |
Coluna | Esta anotação especifica as propriedades da coluna para a qual uma propriedade ou campo será mapeado. Possui os seguintes atributos: |
veja a Documentação do Hibernate para mais detalhes sobre anotações do Hibernate e estratégias de cache.
Como configurar regiões de cache
O Hibernate usa regiões de cache para armazenar objetos. NCache permite que regiões de cache sejam configuradas com propriedades diferentes. Para este propósito, NCache tem um arquivo de configuração chamado ncache-hibernate.xml, que contém todas as configurações da região e outras configurações relacionadas usadas por NCache. Você pode colocar este arquivo no diretório raiz do aplicativo ou na pasta de configuração do NCache Diretório de instalação.
Segue uma amostra ncache-hibernate.xml arquivo de configuração:
<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>
configuração do aplicativo: Esta seção permite especificar a configuração para o uso do NCache para uma aplicação específica. Várias configurações de aplicativos podem ser especificadas em ncache-hibernate.xml. Qualquer aplicação Hibernate usará uma das configurações especificadas com base no ID do aplicativo especificado no arquivo de configuração do Hibernate. A seguir estão as opções configuráveis na seção application-config.
Membros | Descrição |
---|---|
ID do aplicativo | Esta opção permite especificar o ID exclusivo para o atual configuração do aplicativo. Este ID é usado para selecionar a configuração apropriada para um aplicativo específico. |
ativar exceção de cache | Identifica se as exceções, caso tenham ocorrido em NCache, será propagado para o provedor Hibernate. |
nome da região padrão | Permite que o usuário especifique uma região padrão para o aplicativo. Se as configurações de uma região específica não forem encontradas, as configurações padrão da região serão usadas. A configuração da região padrão especificada deve existir na seção cache-region. |
sensibilidade de maiúsculas e minúsculas | Esta opção permite ao usuário especificar se as chaves de cache farão distinção entre maiúsculas e minúsculas ou não. Esta opção deve ser configurada de acordo com o banco de dados utilizado. Se o banco de dados diferenciar maiúsculas de minúsculas, defina esta opção como verdadeira, caso contrário, como falsa. |
regiões de cache | Esta seção permite configurar múltiplas regiões de cache para o aplicativo Hibernate. A configuração de cada região é especificada na tag de região. |
região | Esta tag contém as configurações para uma região específica. As opções a seguir podem ser configuradas para qualquer região específica. nome: Cada região é identificada pelo seu nome. O nome da região deve ser exclusivo. nome-cache: Esta opção permite ao usuário especificar NCacheé o nome do cache a ser usado para esta região. prioridade: A prioridade que você deseja usar para itens armazenados em cache. Os valores possíveis são: Default Low BelowNormal Normal AboveNormal High NotRemovable tipo de expiração: Esta opção permite ao usuário especificar o tipo de vencimento de qualquer item desta região. Os valores possíveis são absolutos/deslizantes/nenhum. prazo de validade: Esta opção permite que o usuário especifique o período de expiração se a expiração absoluta/deslizante estiver configurada. Seu valor deve ser maior que 0. As unidades padrão são segundos. |
Dependências do banco de dados | Esta seção permite especificar as dependências do banco de dados para o aplicativo Hibernate atual. dependência: Cada dependência é configurada em uma tag de dependência. Você pode configurar diversas tags para diversas dependências. As opções a seguir podem ser configuradas para cada dependência. nome da entidade: As dependências são adicionadas de acordo com o nome totalmente qualificado das classes. Esta opção permite ao usuário especificar o nome da classe à qual adicionar a dependência atual. Qualquer entidade pode ter no máximo uma dependência. Tipo: Esta opção permite ao usuário especificar o tipo de dependência do banco de dados. Os valores possíveis são oracle/oledb. Desde o NCache Se o provedor usar a string de conexão especificada na configuração do Hibernate, use o tipo de dependência apropriado para a string de conexão. sql-instrução: Permite que o usuário especifique instruções SQL para usar na construção NCachedependência do banco de dados. formato de chave de cache: Esta opção configura o formato da chave de cache para qualquer item do tipo de entidade atual. O formato da chave de cache deve incluir "[pk]", que será substituído pela chave primária do registro. Também pode incluir "[en]" que será substituído pelo nome da entidade. O valor padrão do formato da chave de cache é "[en]#[pk]". O mesmo formato de chave de cache deve ser usado ao escrever gatilhos de banco de dados em caso de dependência do banco de dados OleDb. Ver NCache ajuda para escrever gatilhos de banco de dados para dependência de OleDb. separador de chave composta: Se os registros da entidade atual tiverem uma chave composta como chave primária, a chave de cache é formada pela combinação de todas as chaves separadas pelo separador de chave composta. O separador de chave composta deve ter um comprimento de caractere. Seu valor padrão é "$". |
Veja também
Inicializar cache
Adicionar/atualizar no cache
Cache de primeiro nível do Hibernate
Configurar aplicativo de hibernação
Usar cache de consulta