Como desativar temporariamente a estratégia de hibernação de cache de cache de cache somente leitura em Grails?

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

Pergunta

No meu aplicativo Grails, algumas das minhas classes de domínio nunca serão alteradas pelos usuários.

No entanto, às vezes é necessário algum trabalho de manutenção, e o administrador deve ser capaz de criar/editar poucas instâncias de tempos em tempos (digamos duas vezes por ano).

Eu gostaria de definir uma estratégia de cache de 2º nível somente leitura para essas classes de domínio (static mapping = { cache usage: 'read-only' } ) E eu gostaria de poder 'desativar' (em situações muito específicas) a estratégia somente leitura, a fim de utilizar algumas instâncias por meio da visualização de edição de andaimes do Grails.

É possível? O que você me aconselha a fazer?

EDITAR: A solução que estou implementando é uma mistura de respostas Pascal e Burt (consulte os comentários). Ambas as respostas são ótimas e úteis. Então, eu recebi um dilemna para escolher a resposta aceita! Enfim, obrigado.

Foi útil?

Solução

Provavelmente é possível, mas provavelmente não trivial. Eu iria com inserções diretas usando groovy.sql.sql. Você perde a validação, mas pode criar instâncias e validá -las, mas não ligue para salvar (). Então faça as inserções do SQL se eles estiverem bem, por exemplo,

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

Outras dicas

Eu realizaria a atualização das entidades dadas usando SQL puro e então faça o necessário evict() Método chama o SessionFactory Para remover as entidades específicas do cache do 2º nível. Observe que você pode ter que remover entidades das coleções também com evictCollection(). Verifique isso Boa postagem no blog Para detalhes sobre despejo.

Encapsular tudo isso em serviços (por exemplo wipeBooksFromGlobalCache()) do que os administradores pode chamar as situações muito específicas que você está mencionando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top