Tengo una colección de estados, que quiero almacenar en caché durante toda la vida de la aplicación, preferiblemente después de que se invoque por primera vez. Estoy usando EclipseLink como mi proveedor de persistencia. En mi entidad EJB3 Tengo el siguiente código:Cómo configurar Caché de consultas en EclipseLink
@Cache
@NamedQueries({
@NamedQuery(
name = "State.findAll",
query = "SELECT s FROM State s",
hints = {
@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
@QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE)
}
)
})
Esto no parece hacer nada, sin embargo, si yo controlo las consultas SQL que van a MySQL todavía lo hace un selecto cada vez que mi bean de sesión utiliza esta NamedQuery.
¿Cuál es la forma correcta de configurar esta consulta para que solo se lea una vez desde la base de datos, preferiblemente en todas las sesiones?
Editar: Estoy llamando a la consulta como la siguiente:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();
Lo mejor de la suerte para averiguar la configuración de sesión/almacenamiento en caché de EclipseLink. Nunca pude. – cletus