Невозможно удалить с помощью Spring MVC и Hibernate - PullRequest
2 голосов
/ 04 ноября 2010

У меня есть простой метод удаления, он получает идентификатор из таблицы, которая перечисляет все из базы данных:

@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);
    }
}

И вот метод удаления из моего дао:

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

Я нажимаю кнопку удаления, которая вызывает метод doExcluir (), который должен удалить данные. Он возвращается на страницу списка, как и должно быть, но просто не удаляет данные из таблицы. Я сделал что-то не так?

Ответы [ 3 ]

2 голосов
/ 04 ноября 2010

Вы не совершаете транзакцию:

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

В качестве примечания, почему бы вам не использовать Spring и встроенное управление транзакциями для удаления всего этого стандартного кода?

1 голос
/ 04 ноября 2010

Вы можете взять в качестве примера 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);
    }
}
0 голосов
/ 04 ноября 2010

Вы можете добавить @Transactional к вашему методу контроллера.

Конечно, вам нужно настроить Spring для распознавания этого. Но тогда вы можете пропустить большую часть сеанса кода обработки транзакций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...