Hibernate异常 - 无法执行更新查询

时间:2011-03-22 23:36:00

标签: java hibernate java-ee

我有以下方法,使用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 个答案:

答案 0 :(得分:3)

尝试使用参数化查询来解决此问题。

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

我认为设置参数的代码是

myQuery.setParameter("username", username);

myQuery.setParameter("password", password);

答案 1 :(得分:0)

参数值是否应该被转义?另外:为什么不使用setParameter()而不是手工构建整个查询?它会为你做所有必要的逃避。代码可以是:

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