org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class br.com.casadocodigo.loja.conf.JPAConfiguration: Invocation of init method failed; nested exception is org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
Classe ProdutosController
@Controller
@RequestMapping("/produtos")
public class ProdutosController {
@Autowired
private ProdutoDAO dao;
@Autowired
private FileSaver fileSaver;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.addValidators(new ProdutoValidation());
}
@RequestMapping("/form")
public ModelAndView form(Produto produto) {
ModelAndView modelAndView = new ModelAndView("produtos/form");
modelAndView.addObject("tipos", TipoPreco.values());
return modelAndView;
}
@RequestMapping(method=RequestMethod.POST)
public ModelAndView gravar(MultipartFile sumario, @Valid Produto produto, BindingResult result,
RedirectAttributes redirectAttributes){
if(result.hasErrors()) {
return form(produto);
}
String path = fileSaver.write("arquivos-sumario", sumario);
produto.setSumarioPath(path);
dao.gravar(produto);
redirectAttributes.addFlashAttribute("sucesso", "Produto cadastrado com sucesso!");
return new ModelAndView("redirect:produtos");
}
@RequestMapping( method=RequestMethod.GET)
public ModelAndView listar() {
List<Produto> produtos = dao.listar();
ModelAndView modelAndView = new ModelAndView("produtos/lista");
modelAndView.addObject("produtos", produtos);
return modelAndView;
}
@RequestMapping("/detalhe/{id}")
public ModelAndView detalhe(@PathVariable("id") Integer id){
ModelAndView modelAndView = new ModelAndView("/produtos/detalhe");
Produto produto = dao.find(id);
modelAndView.addObject("produto", produto);
return modelAndView;
}
}
Classe ProdutoValidation
public class ProdutoValidation implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Produto.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "titulo", "field.required");
ValidationUtils.rejectIfEmpty(errors, "descricao", "field.required");
Produto produto = (Produto) target;
if(produto.getPaginas() <= 0) {
errors.rejectValue("paginas", "field.required");
}
}
}