2016-04-07 23 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行的關鍵字AS之後的空格。

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

編輯:

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

看到帕特里克它現在需要在項目中 –

相關問題