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 に答える