4

我必须使用通配符搜索数字字段。相应的 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 对数字字段进行类似操作?

4

1 回答 1

4

你试过这个吗

PredicateOperation predicateOperation = new PredicateOperation(Ops.LIKE,
  entity.personNumber, Expressions.constant("1%"));

我将了解为什么 stringValue() 表达式不适用于 OpenJPA。

于 2012-02-17T10:43:32.220 回答