2012-02-17 11 views
3

の場合、ワイルドカードを使用して数字フィールドを検索する必要があります。クエリは次のようになり、対応するJQPL:QueryDSL数字の操作が

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で数字フィールドに同様の操作を行う方法はありますか?

+0

必ず1 * – Luk

+0

ではなく、1〜2でなければなりません。定数定数=(定数)Expressions.constant(personNummer); PredicateOperation predicateOperation = new PredicateOperation(Ops.LIKE、entity.personNumber、Expressions.constant(constant)); ' *または_の代わりに%で入れた方が良いでしょうか? – Luk

答えて

3

はあなたのstringValue()式がOpenJPAのために動作しませんなぜ私が表示されます。この

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

を試してみました。

+0

QueyDsl 4では 'entity.personNumber.like("%1 ")'と直接動作します。 –