Здравствуйте, ребята. У меня возникли проблемы с точными совпадениями при выполнении NamedQuery.
Я в настоящее время используется что-то вроде этого:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from Entry e where e.name =:"+ Entry.NAME )
...
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName());
Это работает для большинства случаев, однако я заметил, что в случае, если пользователь передает имя файла с пробелом в конце, namedQuery игнорирует этот символ. Например:
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName()+ " ");
вернет то же самое результат как запрос раньше. Обход моей валидации «действительной записи». Другими словами, я бы хотел, чтобы запрос вообще не возвращал ни одной записи и позже обрабатывал ошибку.
Один из обходных путей, о котором я мог подумать, - это поставить одиночный кавычки вокруг моего параметра в namedQuery, например так:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from entry e where e.name =':"+ Entry.NAME "'")
Однако, мой код будет перегружен, если в строке есть одинарные кавычки ...
Есть идеи, ребята?