No meu projeto, quero armazenar em cache alguns objetos, mas nãomesa inteira. Portanto, meu problema é que existe uma API que eu poderia usar para adicionar objetos manualmente ao hibernar o cache de segundo nível? (Ou existe uma maneira de especificar a região de dados da tabela para o cache de segundo nível?)
Respostas:
3 para resposta № 1Você pode anotar com @Cacheable (verdadeiro) as entidades que você deseja armazenar em cache
@Cacheable(true)
@Entity
public class Person { ... }
e, em seguida, no seu arquivo de configuração persistence.xml, é necessário definir o [shared-cache-mode][2]
elemento a ser usado ENABLE_SELECTIVE:
<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
então agora:
O armazenamento em cache está ativado para todas as entidades, pois Cacheable (true) está especificado. Todas as outras entidades não são armazenadas em cache.
Para especificar regiões, você pode usar o Hibernate específico @Cache anotação:
@Cacheable(true)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="your-entity-region")
@Entity
public class Person { ... }
Agora você precisa habilitar o cache de segundo nível:
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<property name="hibernate.cache.region.factory_class">
org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
Para adicionar entidades ao cache de 2º nível, basta carregar a entidade (e ela será armazenada em cache automaticamente):
Person person = entityManager.find(Person.class, 1L);