QueryDSL与Number上的操作类似

时间:2012-02-17 09:29:26

标签: java querydsl

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

1 个答案:

答案 0 :(得分:3)

你试过这个吗?

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

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