Estou usando o critéria do Hibernate e tentando excluir vários objetos através de uma consulta e não estou conseguindo. Segue o meu código que tentei usar
@SuppressWarnings("unchecked")
@Override
@java.beans.Transient
public void excluirServico(Date dataInicio, Date dataFim, Funcionario funcionario) {
Session session = HibernateConnection.getFactorySession();
List<Servico> servicos = new ArrayList<Servico>();
servicos = session.createCriteria(Servico.class)
.add(Restrictions.between("data", dataInicio, dataFim))
.add(Restrictions.eq("funcionario.condigoFunc", funcionario.getCodigoFunc())).list();
for (Servico serv : servicos){
session.delete(serv);
}
}
Para métodos de consulta não é necessário abrir transação nem executar o commit, mas para métodos de escrita, como o delete(), é necessário realizar estes passos. Não vi nenhum, nem outro no seu código.
Você tem alguma exceção sendo lançada quando executa o delete() ?
Olá amigo, bom sou novo no desenvolvimento e estou acompanhando um curso. Mais está assim meu código
OBS: Alguns métodos estão funcionando no meu DAO, Ex: salvar,consultar e outros.
OBS: Ele está mostrando uma mensagem que eu coloquei dentro do meu try do meu Bean como estivesse conseguido excluirm mais não exclui. Caso precise posso colocar o código completo.
@WebFilter(servletNames = { “Faces Servlet” })
public class HibernateSessionFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
Session session = HibernateConnection.getFactorySession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();//inicia uma transação.
request.setAttribute("session", session);//variavel de requisição.
chain.doFilter(request, response);
transaction.commit();
} catch (Exception e) {
//Se der problema, não faz o commit, eu faço o rollbalck().
if (transaction != null) {
transaction.rollback(); // retorno dos dados, caso ocorra erro.
}
} finally {
session.close();
}
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
Classe de Conexão.
public class HibernateConnection {
private static final SessionFactory factorySessao;
static {
try {
Configuration configuration = new Configuration(); //representa uma configuração Hibernate
configuration.configure();//ler meu arquivo.xml que configurei
//Conecta com Banco.
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
//Criando a Fábrica de Sessão.
factorySessao = configuration.buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
throw new ExceptionInInitializerError(); //É um erro de Inicialização.
}
}
/*
* Método Statico que abre a conexão.
*/
public static Session getFactorySession() {
return factorySessao.openSession();
}
public static Object getRequestAttribute(String nome) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); //
return request.getAttribute(nome);
}
}