Comment utiliser JPA2 de @Cacheable au lieu de Hibernate @Cache

Généralement , j'utilise Hibernate @Cache(utilisation = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) à cache un @Entité de la classe , et il fonctionne bien.

Dans JPA2 , il y a une autre @Cacheable annotation qui semble être la même fonctionnalité avec Hibernate @Cache. Pour faire ma classe d'entité indépendante de hibernate paquet , j'ai envie de lui donner un essai. Mais je ne peux pas le faire fonctionner. Chaque fois qu'une simple requête id heurte encore à la DB.

Quelqu'un peut-il me dire d'où vient le problème ? Merci.

Classe d'entité :

@Entity
//@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Cacheable(true) 
public class User implements Serializable
{
 //properties
}

De la classe de Test :

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:app.xml"})
@TransactionConfiguration(transactionManager="transactionManager")
public class UserCacheTest
{
  @Inject protected UserDao userDao;

  @Transactional
  @Test
  public void testGet1()
  {
    assertNotNull(userDao.get(2L));
  }

  @Transactional
  @Test
  public void testGet2()
  {
    assertNotNull(userDao.get(2L));
  }

  @Transactional
  @Test
  public void testGet3()
  {
    assertNotNull(userDao.get(2L));
  }
}

Le résultat du test montre chaque "get" hits DB couche (avec mise en veille prolongée.show_sql=true).

Persistence.xml :

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_outer_join" value="true"/>

<property name="hibernate.cache.provider_class" value="org.hibernate.cache.SingletonEhCacheProvider"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>

JPA code :

@Override
public T get(Serializable id)
{
  return em.find(clazz, id);
}
InformationsquelleAutor smallufo | 2010-09-08