无法使用Spring MVC和Hibernate删除

时间:2010-11-04 04:21:37

标签: java hibernate spring orm spring-mvc

我有一个简单的删除方法,它从一个表中获取id,该表列出了db:

中的所有内容
@RequestMapping(value = "/personagem/excluir.htm")
public ModelAndView doExcluir(@RequestParam("id") int id) {
    logger.info("Recebendo parametro: {Id => " + id + "}");
    try {
        Personagem p = getPersonagemService().buscarPorId(id);
        logger.info("Excluindo personagem: {Id => " + p.getId() + ", Nome => " + p.getNome() + ", Classe => " + p.getClasse() + "}");
        getPersonagemService().excluir(p);
        return new ModelAndView("excluir");
    } catch (Exception ex) {
        return new ModelAndView("erro", "mensagem", "Ocorreu um erro: " + ex);
    }
}

继承我的dao中的删除方法:

public void excluir(Object obj) {
    getSession().beginTransaction();
    getSession().delete(obj);
    getSession().flush();
    getSession().close();
}

我单击删除按钮,调用doExcluir()方法,该按钮应该删除数据。它会回到列表页面,但它不会从表中删除数据。我做错了什么?

3 个答案:

答案 0 :(得分:2)

您没有提交交易:

public void excluir(Object obj) {
    getSession().beginTransaction();
    getSession().delete(obj);
    getSession().getTransaction().commit();
    getSession().close();
}

作为旁注,为什么不使用Spring及其集成的事务管理来删除所有这些样板代码?

答案 1 :(得分:1)

您可以将Spring's pet-clinic示例作为参考。我为您的案例提供了相关部分:


public class HibernateClinic implements Clinic {
    private SessionFactory sessionFactory;

    @Autowired
    public HibernateClinic(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public void deletePet(int id) throws DataAccessException {
        Pet pet = loadPet(id);
        sessionFactory.getCurrentSession().delete(pet);
    }
}

答案 2 :(得分:0)

您可以将@Transactional添加到控制器方法中。

当然,你需要配置Spring来识别它。 但是,您可以跳过很多会话的事务处理代码。