我想对我的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,所以,有人能帮我做一个区分大小写的查询吗?谢谢。
1条答案
按热度按时间k2arahey1#
只需使用binary作为函数,它在sql中仍然是有效的语法,但也被hibernate接受:
"... 其中u.login=binary(“+login+”),u.contrasenya=binary(“+contrasenya+”)”;
另外,您可能希望通过使用查询参数而不是字符串连接来避免sql注入。