QueryDsl Like Operation по номеру
Вопрос
Я должен искать поля с подстановками. Соответствующий запрос JQPL был бы таким:
SELECT e From Entity e where e.personNumber LIKE :numberPattern
NumberPattern - это такая строка: «1 ?? 2», а E.PersonNumber - это число в базе данных (H2).
Если я запускаю это с JQPL, это вообще не проблема, но я не могу поместить его в запрос QueryDSL.
Когда я пытаюсь
andBuilder.and(entity.personNumber.stringValue().like(numberPattern)
Я получаю
org.apache.openjpa.persistence.ArgumentException: "str (" bei Zeichen 7 gefunden, erwartet wurde jedoch ["(", "+", ...
Если я попытаюсь сделать это так:
Constant<String> constant = (Constant<String>) Expressions.constant(personNummer);
PredicateOperation predicateOperation = new PredicateOperation(Ops.LIKE, entity.personNumber, Expressions.constant(constant));
Результатом будет
Data conversion error converting "1*"; SQL statement:
Caused by: java.lang.NumberFormatException: For input string: "1*"
Итак, есть ли способ иметь подобную операцию на поле с помощью QueryDsl?
Решение
Вы пробовали это
PredicateOperation predicateOperation = new PredicateOperation(Ops.LIKE,
entity.personNumber, Expressions.constant("1%"));
Я пойму, почему выражение StringValue () не работает для OpenJPA.
Не связан с StackOverflow