Pergunta

Eu estou querendo saber se é possível para o Hibernate cache de segundo nível (estamos usando EHCache) para permitir que um aplicativo para armazenar em cache uma entidade que tem sido comprometidos com o DB se ele sabe que nenhum outro aplicativo está modificando o DB.

Meu pensamento é que se eu atualizar o registro A, então eu sei o valor de registro A e deve ser capaz de cache que, sistemas de agrupamento JVM como Terracotta apoiar este tipo de comportamento em termos de memória heap JVM usando fechaduras de sincronização Java.

EHCache bloqueio de configuração do modo em Hibernate

Foi útil?

Solução

O estado da arte POJO está em Ação livro fala sobre isso

Se uma aplicação de servidor único atualiza o banco de dados usando o framework de persistência, o quadro atualiza o cache de nível processo.

E ...

objetos em cache que são atualizável normalmente deve usar o bloqueio otimista, porque isso vai impedir que o aplicativo cegamente substituir alterações no banco de dados. E se uma transação atualiza um objeto em cache que já havia sido alterado no banco de dados, a falha bloqueio otimista fará com que a transação seja revertida. O framework de persistência irá remover os dados obsoletos do cache, ea aplicação pode repetir transação com a versão mais recente dos dados.

E escolher uma das seguintes estratégias de acordo com JPA com Hibernate livro

  • Transactional: disponível em apenas um ambiente gerenciado, garante integral transacional isolamento até a leitura repetida, se necessário. Use esta estratégia para leitura na sua maioria de dados em que é fundamental para evitar que os dados obsoleto em transações simultâneas, No caso raro de uma atualização.
  • leitura e escrita: Esta estratégia mantém leitura confirmada isolamento, usando um timestamping mecanismo e está disponível apenas em ambientes não clusterizados. Mais uma vez, usar essa estratégia para leitura na sua maioria de dados onde é fundamental para evitar que dados obsoletos em transações concorrentes, no caso raro de uma atualização.

Somado a anwser original: Hibernate não consistência de garantia entre o cache eo banco de dados se você usar @Cache (uso = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE). Se você quiser usá-lo, então você deve configurar um suficientemente curto de tempo limite de validade que pode afetar perfomance.

Atenciosamente,

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