hibernate上区分大小写的java查询(mysql)

r1wp621o  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(416)

我想对我的hibernate项目执行一些区分大小写的查询,但是每当我对查询使用“binary”或“collate”使其区分大小写时,就会出现以下错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: BINARY near line 1, column 51 [SELECT u FROM entidades.Usuario u WHERE u.login = BINARY 'XNC' AND u.contrasenya = BINARY 'xnc']

以下是完整(和原始)代码:

Session session = sessionFactory.getCurrentSession();
String select;

try {
        session.beginTransaction();

        select = "SELECT u FROM " + getEntityClass().getName() + " u WHERE u.login ='" + login + "' AND u.contrasenya ='" + contrasenya +"'";
    }

    Query query = session.createQuery(select);
    Usuario usu =  (Usuario) query.uniqueResult();
    session.getTransaction().commit();
    return usu;

    }catch (Exception ex) {
        ex.printStackTrace();
        funciones.mostrarMensajeError(ex.getMessage());
    }

我的表也是utf8\u bin,所以,有人能帮我做一个区分大小写的查询吗?谢谢。

k2arahey

k2arahey1#

只需使用binary作为函数,它在sql中仍然是有效的语法,但也被hibernate接受:
"... 其中u.login=binary(“+login+”),u.contrasenya=binary(“+contrasenya+”)”;
另外,您可能希望通过使用查询参数而不是字符串连接来避免sql注入。

相关问题