2012-07-25 96 views
2

您好我有一個命名查詢如何設置參數命名查詢

@NamedQuery(name = "StudyplanCategory.findByStatusAndLimit", 
      query = "SELECT s FROM StudyplanCategory s WHERE 
      s.status =:status LIMIT s.start=:start,s.end=end") 

我想設置這樣的限制:

@NamedQuery(name = "StudyplanCategory.findByStatusAndLimit", 
      query = "SELECT s FROM StudyplanCategory s WHERE 
      s.status =:status LIMIT s.start=:start,s.end=end") 

但是,這是顯示在啓動時的錯誤服務器。 我使用下面的代碼來調用DAO類查詢:需要設置

Query query = entityManager.createNamedQuery("StudyplanCategory.findByStatusAndLimit"); 
int end=(start*pageNumber); 
query.setParameter("status", status); 
query.setParameter("start", start); 
query.setParameter("end", end); 
return (List<StudyplanCategory>) query.getResultList(); 

start和end參數。請幫忙。

+0

從什麼時候開始LIMIT一直在JPQL有效的關鍵字?這是SQL(並且只適用於可能的RDBMS的子集) – DataNucleus 2012-07-25 13:07:01

+0

嗨,你的意思是它不可能與JPQL.Is有任何解決方法。 – 2012-07-25 13:08:50

+0

我說這不是關鍵字...爲什麼不看JPA規範?它允許在Query上設置範圍(當你執行它時);在Google中輸入它會發現它 – DataNucleus 2012-07-25 13:12:24

回答

5

由於@DataNucleus表示,LIMIT不是JPQL中的有效關鍵字。這不是指定要返回多少行的方式。這是你如何做到這一點:

@NamedQuery(name = "StudyplanCategory.findByStatusAndLimit", 
     query = "SELECT s FROM StudyplanCategory s WHERE 
        s.status =:status") 

,這將是該代碼調用命名查詢:

Query query = entityManager.createNamedQuery("StudyplanCategory.findByStatusAndLimit"); 
int end=(start*pageNumber); 
query.setParameter("status", status); 
query.setFirstResult(start); 
query.setMaxResults(end - start); 
return (List<StudyplanCategory>) query.getResultList(); 
+0

嗨是的它已經在工作。我在Primefaces中有一個Lazy Loading數據表,我希望這個命名查詢可以用這個來執行。 – 2012-07-25 13:22:20

+0

嗨@Damian我使用了相同的工作。但是,當DataTable首先被加載時,分頁但沒有激活。原因是它只提取加載第一頁所需的有限數據所以下一個按鈕不活動。請幫助。 – 2012-08-17 11:58:15

+0

我不明白你在說什麼..問題是關於jpa,現在你正在談論一個datatable ..爲此創建一個新問題,解釋你正在使用的技術,以及一些代碼片段.. – Damian 2012-08-17 12:18:49