2013-03-05 104 views
1

我具有其中延伸Primefaces角色地圖<字符串,字符串>到地圖<Long,Long>

LazyDataModel
@Override 
    public List<Project> load(int first, int pageSize, 
      String sortField, SortOrder sortOrder, Map<String, String> filters) { 

在上述過濾器一類中的以下代碼的類型是Map<String, String>

的以我休眠實體類我有以下

private Long projectNo; // with getters and setters 

和DAO類,我有以下也做在JSF頁面搜索,並返回結果

public void getProjects(ProjectQueryData data) { 

Map<String, String> filters = data.getFilters(); 
// .... 
.... 

String projectNo = filters.get("projectNo"); 
List<Predicate> criteria = new ArrayList<Predicate>(); 
      if (projectNo!= null) { 
       ParameterExpression<String> pexp = cb.parameter(String.class, 
         "projectNo");    
       Predicate predicate = cb.equal(emp.get(Project_.projectNo), 
         pexp); 
       criteria.add(predicate); 
      } 
TypedQuery<Project> q = entityManager.createQuery(c); 
TypedQuery<Long> countquery = entityManager.createQuery(countQ); 
q.setParameter("projectNo", projectNo); // error in this line 
countquery.setParameter("projectNo", projectNo); 

當我執行上面我收到以下異常

Hibernate Parameter value [89457] did not match expected type [java.lang.Long] 

因爲projectNo是長期的。

我的問題是我怎麼能投Map<String,String>Map<Long,Long>,這樣我就不會在這行q.setParameter("projectNo", projectNo);

任何幫助是非常明顯的得到一個錯誤。

感謝

+0

在設置值時將實體類修改爲字符串。 – PSR 2013-03-05 18:50:40

+2

地圖是否包含有效數字的字符串?如果是這樣,爲什麼不把'String projectNo'轉換成'Long'? – harpun 2013-03-05 18:52:07

回答

3

你不能投Map<String,String> to Map<Long,Long>,你爲什麼不使用Map<Object,Object>Map<String,Object>如果你的參數地圖期待所有的數據類型。

在這種情況下,它好像你也可以通過它轉換爲String或地圖設置不久達到修復,

String.valueOf(projectNo); 

or 

Long.toString(projectNo); 

任何需要的地方。

+1

我寧願使用Map 和Long.valueOf(projectNo),但我想這也是你的意思,對吧? – 2013-03-06 10:50:29

+0

Map 是存儲參數映射的好主意,它接受變量數據類型,但由於某些原因,OP正試圖將Long,Long轉換爲String,String – 2013-03-06 13:34:18

相關問題