我想在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());
}
答案 0 :(得分:1)
只需使用二进制作为函数,这在SQL中仍然是有效的语法,但也被Hibernate接受:
” ... u.login = binary('“ + login +”')和u.contrasenya = binary( '“ + contrasenya +”')“;
此外,您可能希望通过使用查询参数而不是字符串串联来避免SQL注入。