【问题标题】:How to solve unknown column in where clause如何解决where子句中的未知列
【发布时间】:2021-01-05 17:00:57
【问题描述】:

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 不起作用吗?

【问题讨论】:

  • 请使用参数,会解决的

标签: sql spring hibernate


【解决方案1】:

未知列与字符串周围缺少的引号有关,因此字符串内容被评估为列名。

您可以使用参数绑定来避免这种情况:

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

【讨论】:

    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 2021-09-19
    • 2020-06-28
    • 2021-07-02
    • 2019-08-14
    • 2013-07-18
    • 2016-10-04
    相关资源
    最近更新 更多