Olá a todos.
No curso estamos usando as anotações para a manipulação do cache em nossas próprios controladores
@Controller
public class HomeController {
@RequestMapping("/")
@Cacheable(value="produtosHome")
public ModelAndView home(){
List<Produto> produtos = produtoDao.listar();
}
@Controller
@Scope(value=WebApplicationContext.SCOPE_REQUEST)
public class ProdutosController {
@RequestMapping(value="/produtos",method=RequestMethod.POST)
@CacheEvict(value="produtosHome",allEntries = true)
public ModelAndView grava(MultipartFile sumario,@Valid Produto produto,BindingResult result){
//dao.save.......
}
}
a primeira pergunta é: se eu tiver uma outra lógica que contenha essa listagem de produtos em outro controlador qualquer ele já vai estar no cache?
A segunda pergunta é: não seria mais natural(se possível) configurar o cache no próprio repositório?
@Repository
@Transactional
public class ProdutoDAO {
@PersistenceContext
private EntityManager manager;
@CacheEvict(value="produtosHome",allEntries = true)
public void gravar(Produto produto){
manager.persist(produto);
}
@Cacheable(value="produtosHome")
public List<Produto> listar() {
return manager.createQuery("select p from Produto p",Produto.class).getResultList();
}
public Produto find(Integer id) {
return manager.find(Produto.class,id);
}
}