Alguém poderia por favor me explicar como funciona e como se faz um download de arquivos do mysql usando o java com hibernate, preciso de um exemplo facil de entender.
No MySQL crie um campo do tipo blob ou longblob. Na classe Java mapeie esse campo como array de bytes, ou seja, byte[].
Enfim, depois de fazer o select e tudo mais, lá no teu servlet ou action… modifique o cabeçalho content-type com o valor octet/stream e mande imprimir esse array de bytes.
Mais fácil que isso só desenhando 
Pessoal, eu já consegui resolver, estou postando para quem quiser ver
ServletOutputStream outStream = response.getOutputStream();
RequestDispatcher disp = null;
HttpSession session = request.getSession();
Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
if (usuario == null) {
disp = request.getRequestDispatcher("/erros/erroAcessoNegado.jsp");
disp.forward(request, response);
} else {
Long id = Conversor.numeroLong(request.getParameter("id"));
CaptacaoDeAlunos captacaoDeAlunos = new CaptacaoDeAlunosDAO().buscarPorId(id);
response.setHeader("Content-Disposition", "attachment; filename=\"" + captacaoDeAlunos.getNomeDoArquivo() + "\"");
response.setHeader("cache-control", "no-cache");
if (captacaoDeAlunos.getTipoDoArquivo().equals(".txt")) {
response.setContentType("text/plain");
} else if (captacaoDeAlunos.getTipoDoArquivo().equals(".doc")) {
response.setContentType("application/msword");
} else if (captacaoDeAlunos.getTipoDoArquivo().equals(".xls")) {
response.setContentType("application/vnd.ms-excel");
} else if (captacaoDeAlunos.getTipoDoArquivo().equals(".pdf")) {
response.setContentType("application/pdf");
} else if (captacaoDeAlunos.getTipoDoArquivo().equals(".ppt")) {
response.setContentType("application/ppt");
} else {
response.setContentType("application/octet-stream");
}
outStream.write(captacaoDeAlunos.getArquivo());
//}
outStream.close();