1
resposta

Cache com criteria do hibernate

O trecho abaixo não evitou a reexecução da query. Porque?

        // Usando o Criteria do Hibernate
        Session session = em.unwrap(Session.class);
        Criteria criteria = session.createCriteria(Produto.class);

        if(!nome.isEmpty()) 
            criteria.add(Restrictions.like("nome", "%"+nome+"%")).setCacheable(true);
        if(lojaId != null)
            criteria.add(Restrictions.eq("loja.id", lojaId)).setCacheable(true);
        if(categoriaId != null)
            criteria.setFetchMode("categorias", FetchMode.JOIN).createAlias("categorias", "c").add(Restrictions.eq("c.id", categoriaId)).setCacheable(true);

        return (List<Produto>) criteria.list();
1 resposta

Aí depende... Pode ser que tenha expirado, a query sendo executada pode ser diferente(algum parâmetro mudou) ou ainda algum objeto dentro do cache pode ter sido atualizado em outra transação.

Claro que sempre tem a possibilidade do motivo mais simples, alguma configuração equivocada.