Исключение гибернации - не удалось выполнить запрос на обновление - PullRequest
0 голосов
/ 23 марта 2011

У меня есть следующий метод, использующий Hibernate, который сводит меня с ума.Он не обновляет мою базу данных правильно, и я не вижу, в чем проблема.Кто-нибудь может мне помочь с этим?

public boolean changePassword(String username, String password) {
    HttpServletRequest request = ServletActionContext.getRequest();
    SessionFactory sessionFactory = (SessionFactory) request.getSession()
            .getServletContext().getAttribute("sessionFactory");
    Session session = sessionFactory.openSession();

    try {
        request = ServletActionContext.getRequest();
        Query myQuery = session.createQuery("update Administrator "
                + "set password = " + password + " where username = "
                + username);
        if (myQuery.executeUpdate() == 1) {
            return true;
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return false;
}

Вот что у меня в консоли:

Hibernate: update login set password=password1 where username=frank
could not execute update query

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Попробуйте использовать параметризованные запросы для решения этой проблемы.

Query myQuery = session.createQuery("update Administrator "
                + "set password = :password where username = :username");

Я думаю, что код для установки параметров

myQuery.setParameter("username", username);

myQuery.setParameter("password", password);
0 голосов
/ 23 марта 2011

Разве значения параметров не должны быть экранированы? Также: почему бы вам не использовать setParameter() вместо того, чтобы создавать весь запрос вручную? Он сделает все необходимое для вас. Код может быть тогда:

Query q = session.createQuery("update Administrator set password =\
                               :password where username = :username");
q.setParameter("password", password);
q.setParameter("username", username);
...