首页 > 解决方案 > 如何解决where子句中的未知列

问题描述

我对方法 getByLogin 有一个问题:

@Override
    public User getUserByLogin(String username) {
        Session  session = this.sessionFactory.openSession();
        User user =
                (User) session.createQuery("FROM pl.edu.wszib.model.User WHERE username = " + username ).uniqueResult();
        session.close();
        System.out.println(user);
        return user;

    }

我想通过用户名获取用户:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'where 子句'中的未知列'konrad'

我的表格看起来像:

 <form action="/user"  th:object="${user}" method="post" id="login" class="input-group">
                <input type="text" class="input-field" placeholder="username" name="username" th:field="*{username}" th:errorClass="error"required>
                <span th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Incorrect data</span>

                <button type="submit" class="submit-btn">Get your  profil</button>
            </form>

我的控制器看起来:

@RequestMapping("/user")
    public String user(Model model, User user, BindingResult bindingResult){
        if(bindingResult.hasErrors()) {
            return "user"; // powrót do formularza
       }
        User result =  userDAO.getUserByLogin(user.getUsername());
        model.addAttribute("result", result);
        return "resultUser";

    }

    @GetMapping("/user")
    public String userForm(User user) {
        return "user";
    }

但我有第二种方法通过 id 获得,效果很好,我通过 id 获得用户这种方法这个方法看起来:

 @Override
    public User getUserById(int idUser) {
        Session  session = this.sessionFactory.openSession();
        User user =
                (User) session.createQuery("FROM pl.edu.wszib.model.User WHERE idUser = " + idUser ).uniqueResult();
        session.close();
        System.out.println(user);
        return user;

    }

我必须在我的数据库中使用用户,并且一个用户的用户名是 konrad,但是这种方法不起作用。有人可以解释为什么metod getBylogin 不起作用吗?

标签: sqlspringhibernate

解决方案


The unknown column is related to the missing quote around a string, so the string content is evaluated as a column name.

You can avoid this using parameter binding:

    session.createQuery("FROM pl.edu.wszib.model.User WHERE username = :username" )
    .setParameter("username", username)
    .uniqueResult();

推荐阅读