10

私はしなければなりませんRestrictions.like("sequenceNo", "%" + Integer.valueOf(sequenceNo.trim()) + "%")

フィールドsequenceNoは整数型ですが、sequenceNoパラメータ値は文字列です。私の問題は、例外が発生することですjava.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer。いくつかの理由で、私は本当に自分のパラメータを文字列データ型にする必要があります。SQLで整数のように試してみると、機能します。

助けてください。ありがとう。

4

5 に答える 5

9

フェッチ中に、指定されたプロパティ値がエンティティクラスで指定された「フィールドタイプ」に従ってキャストされるため、目的のためにCriteriaのプロパティ制限を追加することはできません。

ただし、解決策は、パスキャストに基準のSQLRestrictionを使用することです。私はテストしました、そしてこれは働きます。

yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo LIKE '%"+yourSequenceNumToSearch+"%' "));

リストを取得するには、以下のようにします

List ls = yourDetachedCriteriaObj.getExecutableCriteria(yourSession).list();
// iterate over list or do whatever.
于 2013-03-29T10:32:49.073 に答える
2

私は恥ずかしいですが、postgresで次の回避策を実行しました

crit.add(Restrictions.sqlRestriction(entry.getKey()+"::text like '%"+entry.getValue().replace("'", "''")+"%'"));
于 2014-02-28T14:03:00.440 に答える
0

私のpostgresの変更

cr34.add(Restrictions.sqlRestriction(cr34.getAlias()+"_。field:: text like'%" + fieldVal + "%'"));
于 2016-05-26T09:58:00.610 に答える
0

整数検索パラメータの場合

基準=session.createCriteria(demo.class).add(Restrictions.sqlRestriction( "sequenceNo LIKE'%" + searchParameter + "%'"));

これを試して...

于 2016-06-10T12:41:48.030 に答える
0
yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo LIKE '%"+yourSequenceNumToSearch+"%' "));

型キャストを無効にするとエラーが返されます。

演算子が終了しません:整数~~不明ヒント:指定された名前と引数のタイプに一致する演算子はありません。より明示的な型キャストを追加する必要があるかもしれません。

したがって、次のコードを使用できます。

yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo ::text LIKE '%"+yourSequenceNumToSearch+"%' "));
于 2016-07-31T13:08:50.463 に答える