Я хочу сделать некоторые запросы с учетом регистра в моем проекте 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_bin, так, может кто-нибудь поможет мне сделать запрос с учетом регистра, пожалуйста? Благодарю.
Просто используйте двоичный файл как функцию, которая по-прежнему является допустимым синтаксисом SQL, но также принимается Hibernate:
"... WHERE u.login = binary ( '" + login + "' ) И u.contrasenya = двоичный ( '" + contrasenya + "' ) ";
Кроме того, вы можете избежать SQL-инъекции, используя параметры запроса, а не конкатенацию строк.