Wie verwende ich JPA2s @Cacheable anstelle von Hibernates @ Cache

ormalerweise benutze ich Hibernate's@ Cache (usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE), um eine @Entity-Klasse zwischenzuspeichern, und es funktioniert gut.

In JPA2 gibt es eine weitere @Cacheable-Annotation, die anscheinend die gleiche Funktionalität aufweist wie @Cache von Hibernate. Um meine Entitätsklasse vom Paket des Ruhezustands unabhängig zu machen, möchte ich es versuchen. Aber ich kann es nicht zum Laufen bringen. Jedes Mal, wenn eine einfache ID-Abfrage die DB noch trifft.

ann mir jemand sagen, wo es schief geht? Vielen Dank

Entity-Klasse:

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

Testklasse:

@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));
  }
}

Das Testergebnis zeigt, dass jeder "get" -Ergebnis-DB-Layer (mit hibernate.show_sql = true) auftritt.

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);
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage