2016-04-07 22 views
0

に設定されているわけではありません、私はJPAでネイティブクエリを設定していますが、それはこれが私のクエリで期待通りに実行されていると私は例外 を与えませんでした:休止状態:すべての名前付きパラメータが

l_query = "SELECT creationdate AS " + m_dateFrom.getValue(); 
       l_query += "AND creationdate AS" + m_dateTo.getValue(); 
       l_query += "from tablename"; 

    Error i am getting is: 

    org.hibernate.QueryException: Not all named parameters have been set: [20:53] [SELECT creationdate AS Tue Mar 01 10:20:53 IST 2016AND creationdate ASThu Apr 07 10:20:53 IST 2016from tablename] 

答えて

0

それはあなたには、いくつかが欠けているようですキーワード2と3のキーワードANDとFROMの前に空白があり、キーワード2の後ろにキーワード2が続きます。

0

主に有効なSQLではないため、複数の問題があります。日付の値が内部の引用符ではないので、指定されたパラメータのエラーが表示されるので、セミコロン:のために解析して混乱します。 これを修正する最も簡単な方法は、連結する値に二重引用符(')を使用して、DATEにキャストすることです(ANDをカンマ,に置き換えて、文字列連結の間にスペースを追加します)。

+0

あなたが例 –

0

あなたのl_queryが間違っています。クエリのさまざまな部分で空白が見つかりませんでした。 QueryExceptionは、間違ったSQLを表示します。

あなたのプロジェクトでjpaを使用していることに言及しました。 なぜあなたはそれを使用しないのですか?

私にとっては、この場合は単純なnative queryは必要ないようです。代わりにjpql queryを使用してください。

クエリは、クエリに直接属性値を与えるため、SQLインジェクションの大きな問題です。代わりにパラメータを使用します。

例えば、あなたのコードは、このサンプル・コード上に構築することができます:

public List findWithName(String name) { 
    return em.createQuery(
     "SELECT c FROM Customer c WHERE c.name LIKE :custName") 
     .setParameter("custName", name) 
     .getResultList(); 
} 

Here are some examples

EDIT:

StringBuilder l_query = new StringBuilder("SELECT t.creationdate AS '" + m_dateFrom.getValue()); 
l_query.append("', t.creationdate AS '" + m_dateTo.getValue()); 
l_query.append("' from tablename t").toString(); 
+0

を提供することができ、私は名前のないネイティブクエリを使用しています –

+0

@tusharsharma私は知っています。しかし、なぜ?プロジェクトでjpaを使用しています。私にとって複雑なクエリはネイティブでなければなりません。しかし、これはあなたの決定です。 – Patrick

+0

パトリックそれは今プロジェクトの必要性を参照してください –