Вопрос

Я должен искать поля с подстановками. Соответствующий запрос 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top