简体   繁体   English

Hibernate上的区分大小写查询(MySQL)

[英]Case sensitive query on Hibernate (MySQL)

I want to do some case sensitive queries on my Hibernate project but whenever I use "BINARY" or "COLLATE" on the query to make it case sensitive, I get this error: 我想对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']

This is the full (and original) code: 这是完整的(原始)代码:

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());
    }

My table is utf8_bin too, so, can somebody help me to do a case sensitive query, please? 我的表也是utf8_bin,所以,有人可以帮我做一个区分大小写的查询吗? Thanks. 谢谢。 在MySQL上的表

Just use binary as a function, which is still a valid syntax in SQL, but also accepted by Hibernate: 只需使用二进制作为函数,这在SQL中仍然是有效的语法,但也被Hibernate接受:

"... WHERE u.login = binary( '" + login + "' ) AND u.contrasenya = binary( '" + contrasenya +"' ) "; “ ...在哪里u.login = binary( '” + 登录 +“' AND u.contrasenya = binary( '” + consensenya +“' ”;

Also, you may want to avoid SQL injection by using query parameters instead of string concatenation. 另外,您可能希望通过使用查询参数而不是字符串串联来避免SQL注入。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM