0

私は休止状態を使用しており、特定のフィールドで LIKE を実行しようとしています。

文字列を分割してから、HQL を生成しています。

table.entry LIKE :argsearch_0 OR table.entry LIKE :argsearch_0 OR 
table.entry LIKE :argsearch_1 OR table.entry LIKE :argsearch_1 

(実際には、0 と 1 はカウンターでインクリメントされます)。

しかし、私は得る:

Not all named parameters have been set: [argsearch_0]

最初の質問:

  • 2 つの名前付きパラメーターを使用して、setParameter (または setString) を 1 つだけ実行できますか?

    String nameParam = "argsearch_"+i;
    q.setParameter(nameParam, "%"+args[i]+"%");
    

2 番目の質問:

  • パラメータが機能しないのはなぜですか?
4

2 に答える 2

1

「2 つの名前付きパラメーターを使用して setParameter を 1 つだけ実行できますか」と尋ねるときの意味によって異なります。

元のクエリには 2 つの名前付きパラメーター ('argsearch_0' と 'argsearch_1') があり、それぞれに 2 つの使用法があります。したがって、'argsearch_0' と 'argsearch_1' の両方に対して set を呼び出す必要があります。ただし、 set はそれぞれに対して 1 回だけ呼び出します (実際には、本当に必要な場合は、各パラメーターに対して複数回 set を呼び出すことができますが、最後の 1 回だけが使用されます。

2 番目の質問については、誰かがすでに指摘しているように、コードにバグがあるためです。「argsearch_0」パラメーターの値を設定していません。

于 2012-05-28T21:15:16.117 に答える