2014-10-09 50 views
1

我正在尋找基於主鍵在我的數據庫中選擇多個項目。如何使用JPA的多個SELECT查詢

所以如果我有我想要從數據庫中選擇imagename和refName的名稱。

我發現這裏http://www.objectdb.com/java/jpa/query/jpql/select

TypedQuery<Object[]> query = em.createQuery(
     "SELECT c.name, c.capital.name FROM Country AS c", Object[].class); 
    List<Object[]> results = query.getResultList(); 
    for (Object[] result : results) { 
     System.out.println("Country: " + result[0] + ", Capital: " + result[1]); 
    } 

一些東西,不工作,和別人就會覺得代碼是非常錯誤的,所以我很好奇我怎麼會正好做到這一點?

謝謝大家!

Caused by: java.lang.IllegalArgumentException: You have attempted to set a parameter value using a name of i.name that does not exist in the query string SELECT i.name, i.refName, i.imageName FROM Items AS i. 
    at org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:928) at org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:928) 
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:593) 
    at uploader.AdminControl.fileCreate(AdminControl.java:745) 
    at uploader.AdminControl.upload(AdminControl.java:660) 
    ... 57 more 

..

TypedQuery<Object[]> q = em2.createQuery("SELECT i.name, i.refName, i.imageName FROM Items AS i",Object[].class); 
q.setParameter("name", plan.getFace()[i].name); 
System.out.println(q); 


          List<Object[]> results = q.getResultList(); 

          for (Object[] result : results) 
          { 
          bw.write(result[1].toString()); 
          bw.write(result[2].toString()); 
          System.out.println("result:" + result[1].toString() + "and" + result[2].toString()); 
          } 
+0

那麼,爲什麼您的查詢提'refName',如果這應該基於名稱(「如果我有名字」)爲什麼沒有'WHERE'子句? – 2014-10-09 22:57:14

+0

這是上面鏈接的例子...對不起。 我只是顯示這是我給的,這是正確的使用? 已更新爲顯示錯誤。 – XaolingBao 2014-10-09 23:02:25

+0

給我們真實的代碼。看起來你嘗試從Items類POJO獲得名字。項目聽起來像多個項目... – bigGuy 2014-10-09 23:08:14

回答

2

的問題是因爲這段代碼:

q.setParameter("i.name", plan.getFace()[i].name); 

看看你的JPQL:

SELECT i.name, i.refName, i.imageName FROM Items AS i 

你沒有參數命名i.name。你應該創建一個接收參數。喜歡的東西

SELECT i.name, i.refName, i.imageName FROM Items AS i where i.name = :parameterName 

並通過價值:

q.setParameter("parameterName", plan.getFace()[i].name); 
+0

正如我上面提到的,我不小心將參數與「我」。在前面,因爲我想到「爲什麼不」:)。 This SELECT i.name,i.refName,i.imageName FROM Items AS i where i。name =:parameterName 最終爲我的需求工作。我試圖使用一個常規的SELECT語句,並找出其餘的,但我有點困惑,我需要把什麼,但這是有道理的,所以非常感謝你@ @ – XaolingBao 2014-10-09 23:25:06

0

問題是PARAM NAME

TypedQuery<Object[]> q = em2.createQuery("SELECT i.name, i.refName, i.imageName FROM Items WHERE i.name = :someparam AS i",Object[].class); 
q.setParameter("someparam", plan.getFace()[i].name); 
+0

正如我上面提到的我意外地將參數設置爲「我」。在前面,因爲我想到「爲什麼不」:)。 這不是錯誤。 – XaolingBao 2014-10-11 22:05:28