QueryDSL与Number上的操作类似
我必须使用通配符搜索数字字段。 相应的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 constant = (Constant) 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。