Según mi entendimiento, caché de Segundo nivel se utiliza cuando los objetos se cargan mediante su clave principal. Esto incluye la captura de las asociaciones.Puedo pensar, sólo por encima de la sesión.get(), período de sesiones.la carga de métodos donde caché de segundo nivel se ven en la imagen.

Si la asociación es de la colección o de cualquier otra entidad , como puede ser en caché ? Por ejemplo :-

  @Cacheable
  public class Department{
   private List Employees;
   private DepatmentDetail detail ;

}

¿Cómo puedo hacer que los Empleados de la asociación y el detalle cacheable ? Creo que tengo que mencionar a @caché por encima de las asociaciones de Empleados y nivel de detalle. Pero que no funcionan?

cuando el desarrollador no departamento.getEmployees(), hibernate internamente fuego de la consulta.e

 select * from employees where deptId =1;

Ahora si puedo usar caché de consulta donde me quede explícitamente por encima de consulta y obtener los resultados de la consulta se disparó de nuevo a la db. por qué consulta se disparó de nuevo . Creo que esto está relacionado con la manera de hibernación almacena internamente el resultado de segundo nivel de caché y caché de consultas(que puede ser almacenada en regiones separadas). Si alguien puede arrojar luz sobre este aspecto, también, va a ser genial.

  • Usted parece estar muy confundidos. Todos estos artículos son parte de la caché de segundo nivel. Si la caché de segundo nivel se convirtió en todo (casi) pasa a través de él. Todas las sesiones de utilizar el mismo caché de segundo nivel – esta es la razón por la que es de segundo nivel. Además, cada sesión tiene su propia caché (el primer nivel de caché si se quiere).
  • pero ¿cuál es el diff b/w de segundo nivel y la caché de consultas?
  • En su ejemplo, usted debe poner @Cache anotación en el empleado de la entidad en sí misma la causa de caché de la colección tiene nada pero los empleados de las claves principales (ids) y no real de los empleados de los casos. Esto significa que Hibernan tendrá que ir a la DB a cargar si el empleado sí mismo no está en caché también.
InformationsquelleAutor M Sach | 2014-05-04

3 Comentarios

  1. 7

    Echar un vistazo a los enlaces de abajo en donde se explica en detalles.

    De consulta a nivel de caché:

    Hibernate también implementa una caché para las consultas de conjuntos de resultados que se integra estrechamente con el caché de segundo nivel.

    Esta es una característica opcional y requiere dos adicionales física de caché regiones que mantienen almacenada en la memoria caché los resultados de la consulta y la fecha y hora cuando una tabla se actualizó por última vez. Esto sólo es útil para las consultas que se ejecutan frecuentemente con los mismos parámetros.

    Caché de segundo nivel

    Hibernate es compatible con varios caché de segundo nivel de los proveedores. Cualquier aplicación puede ser usada para caché de segundo nivel.

    Diferencia:

    Caché de consultas único propósito es para almacenar en caché las consultas mientras que el Segundo Caché puede ser usada para caché para otros cachés también.

    Caché de consultas es de Hibernate internamente, mientras que para la caché de Segundo nivel, usted tiene que elegir algunas externo de caché de segundo nivel como Infinispan, EHCache etc.

    De caché de segundo nivel vs caché de consultas vs caché de la colección?

    • «La caché de segundo nivel es para tener acceso al objeto por parte de la Clave Primaria, significa la búsqueda de toda entidades basadas en la Clave Primaria de la ie con la sesión.get(), período de sesiones.métodos load (). Puedo pensar sólo dos métodos anteriores, donde la caché de segundo nivel se ven en la imagen.»Es esta declaración correcta?
    • Decir que he departamento(caché de entidad) que tiene la colección de los empleados. ¿Cómo puedo hacer que los empleados se cacheable también?
  2. 3

    De caché de segundo nivel tiene tabla de hash como estructura interna para almacenar los datos. La Clave aquí será el identificador de la entidad y el valor será deshidratado valores de la entidad. Para obtener los datos de esta memoria caché L2, usted debe tener una Clave es decir, el identificador de la entidad.
    Tan claramente se puede utilizar con los métodos de donde se obtienen entidad por id.

    Este escenario cambia cuando se tiene query_cache también habilitado con caché L2. Consulta caché almacena la consulta y su correspondiente conjunto de resultados de las entidades de ids.
    Ahora, incluso si usted no está yendo a buscar por id (utilizando JPQL o HQL O queryDsl), hibernate comprueba si la misma consulta se despidió antes y si sí obtener la lista de identificadores de la caché de consultas. Después de que devuelve las entidades de caché L2 correspondiente a la misma id.

  3. 0

    Necesitamos de forma expresa el @Cache(usage=CacheConcurrencyStrategy.<VALUE>) sobre las colecciones y @Cacheable en la correspondiente clase de colección.
    Hay una muy buena explicación sobre la hibernación de caché de segundo nivel aquí.

Dejar respuesta

Please enter your comment!
Please enter your name here