Я провел некоторое исследование в JPA и обнаружил, что он выполняет автоматическую обрезку для CHAR, я не уверен, что это ведет себя так же со строками, но так как это происходит со мной ... Я так думаю. Единственный способ обойти это - установить какой-либо атрибут в объекте сеанса DatabaseLogin (см. http://www.eclipse.org/eclipselink/api/1.1/org/eclipse/persistence/sessions/DatabaseLogin.html#setShouldTrimStrings).
Ну, я не хотел портить свойства сеанса, поэтому я решил сделать какую-то проверку и выдать то же исключение, что и улов NoResultException в моем коде.
Я в основном взял результат из базы данных и сравнил поле со строкой, которую я использовал:
query.setParameter(Entry.NAME, myEntry.getName());
...
if(!StringUtils.equals(result.getName(), myEntry.getName()){
do a cool throw just like NoResultException Catch
}
Мне также пришлось включить функцию обрезки axtavt! Это просто для того, чтобы убедиться, что если в базе данных есть столбец с завершающими пробелами и он соответствует параметру, заданному пользователем, он будет включен в качестве правильного ответа. Например:
Запись в базе данных: Name = "Flavio" - Обрезается с помощью Function = "Flavio".
Переданный параметр: Name = "Flavio" - обрезается автоматической функцией JPA = "Flavio".
Если он вообще не обрезается, он просто сравнивает «Flavio» с «Flavio», возвращая NoResult, когда предполагалось вернуть эту запись.
Гадкий обходной путь, но пока нет другого способа остановить автообрезку, нам придется просто использовать такие вещи.
Спасибо за все остальные ответы !!