¿Cómo deshabilitar temporalmente la estrategia de hibernación de caché de solo lectura de solo lectura en gros?

StackOverflow https://stackoverflow.com/questions/2238695

Pregunta

En mi aplicación Grails, algunas de mis clases de dominio nunca serán cambiadas por los usuarios.

Sin embargo, a veces es necesario algunos trabajos de mantenimiento, y el administrador debería poder crear/editar pocos instancias de vez en cuando (digamos dos veces al año).

Me gustaría establecer una estrategia de caché de segundo nivel de solo lectura para estas clases de dominio (static mapping = { cache usage: 'read-only' } ) Y me gustaría poder 'deshabilitar' (en situaciones muy particulares) la estrategia de solo lectura para ubicar algunas instancias a través de la vista de edición de andamios de gros.

¿Es posible? ¿Que me aconsejas hacer?

EDITAR: La solución que estoy implementando es una mezcla de respuestas Pascal y Burt (ver comentarios). Ambas respuestas son excelentes y útiles. ¡Así que obtuve un dilema para elegir la respuesta aceptada! Gracias de todas formas.

¿Fue útil?

Solución

Probablemente sea posible pero probablemente no trivial. Iría con insertos directos con Groovy.sql.sql. Pierde la validación, pero puede crear instancias y validarlas pero no llamar a Save (). Luego, haga las inserciones SQL si están bien, por ejemplo

def thing = new Thing(params)
if (thing.validate()) {
   new Sql(dataSource).executeInsert(
             "insert into thing(name) values(?)", [params.name])
}
else {
   // report validation error
}

Otros consejos

Realizaría la actualización de las entidades dadas usando SQL puro y luego haz el requerido evict() llamadas de método en el SessionFactory Para eliminar las entidades específicas del caché de segundo nivel. Tenga en cuenta que es posible que tenga que eliminar las entidades de las colecciones también con evictCollection(). Mira esto bonita publicación de blog Para detalles sobre el desalojo.

Encapsular todo esto en los servicios (por ejemplo wipeBooksFromGlobalCache()) que los administradores pueden llamar en las situaciones muy particulares que está mencionando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top