Comment désactiver temporairement la stratégie d'hibernate de cache en lecture seule en lecture dans les grails?

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

Question

Dans mon application Graals, certaines de mes classes de domaine ne seront jamais modifiées par les utilisateurs.

Cependant, certains travaux de maintenance sont parfois nécessaires et l'administrateur devrait être en mesure de créer / modifier quelques instances de temps à autre (disons deux fois par an).

Je voudrais définir une stratégie de cache en lecture seule à 2e niveau pour ces classes de domaine (static mapping = { cache usage: 'read-only' } ) Et je voudrais pouvoir «désactiver» (dans des situations très particulières) la stratégie en lecture seule afin d'uder quelques instances via la vue d'édition d'échafaudage de Graals.

Est-il possible? Que me conseillez-vous de faire?

ÉDITER: La solution que j'implémente est un mélange de réponses Pascal et Burt (voir commentaires). Les deux réponses sont excellentes et utiles. J'ai donc obtenu un dilemon pour choisir la réponse acceptée! Quoi qu'il en soit, merci.

Était-ce utile?

La solution

C'est probablement possible mais probablement non trivial. J'irais avec des inserts directs à l'aide de groovy.sql.sql. Vous perdez la validation, mais vous pouvez créer des instances et les valider mais ne pas appeler Save (). Alors faites les inserts SQL s'ils sont ok, par exemple

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

Autres conseils

J'effectuerais la mise à jour sur les entités données en utilisant pur SQL puis faire le requis evict() Les appels de méthode sur le SessionFactory Pour supprimer les entités spécifiques du cache du 2ème niveau. Notez que vous devrez peut-être supprimer les entités des collections également avec evictCollection(). Vérifiez ça Beau article de blog Pour plus de détails sur l'expulsion.

Encapsuler tout cela dans les services (par exemple wipeBooksFromGlobalCache()) que les administrateurs peuvent appeler dans les situations très particulières que vous mentionnez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top