こんにちは皆さん、NamedQueryを実行しているときに、完全一致で問題が発生しています。
私は現在次のようなものを使用しています:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from Entry e where e.name =:"+ Entry.NAME )
...
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName());
ほとんどの場合は機能しますが、ユーザーがファイル名の最後にスペースを付けて渡す場合、namedQueryはその文字を無視することに気付きました。例えば:
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName()+ " ");
以前のクエリと同じ結果を返します。「有効なエントリ」の検証をバイパスします。つまり、クエリがエントリをまったく返さず、後でエラーを処理するようにしたいのです。
私が考えることができる1つの回避策は、次のように、namedQueryのパラメーターを一重引用符で囲むことです。
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from entry e where e.name =':"+ Entry.NAME "'")
ただし、文字列に一重引用符が含まれている場合は、コードが破棄されます...
アイデアはありますか?