2014-01-16 45 views
1

我有一個與此代碼返回所有的Article期從數據庫的方法:但是當我想用的for-each其結果,因爲這如何迭代Criteria生成列表?

public static List getAllArticles(){ 
    Session se=openSession(); 
    List li=se.createCriteria(Article.class).list(); 
    se.close(); 
    return li; 
} 

for(Article a :Boss.getAllArticles()){ 
      //  
    } 

顯示此錯誤:

不兼容的類型:對象不能轉換爲Article

回答

3

您可以使用泛型來簡化它。您的getAllArticles可以返回一個Article對象的列表。它應該是這樣的:

public static List<Article> getAllArticles(){ 
    Session se=openSession(); 
    List<Article> li= (List<Article>)(se.createCriteria(Article.class).list()); 
    se.close(); 
    return li; 
} 

那麼你應該能夠遍歷它使用你表現出循環:

​​
+0

應該是被接受的答案,因爲它避免了不必要的轉換。 – kostja

+0

對不起,只是想知道 - '列表

李=(列表
)(se.createCriteria(Article.class).list());'是不是也是一個鑄造? – Ved

+0

是的,您需要投射爲'list()'方法返回一個非參數化的'List'對象。對於它的價值,我認爲你的答案也很好! – cowls

1

使用您的List爲泛型類型。然後迭代你的列表,它不需要轉換你的對象。

List<Article> li=(List<Article>)se.createCriteria(Article.class).list(); 
1

作如下修改下 -

return (List<Article>)li; 
and public static List<Article> getAllArticles(){} 

或者iterate直通對象,簡單。

+0

爲什麼投,當你可以使用泛型? – kostja

+0

同意@kostja,但考慮快速和簡單的解決方案,考慮O.P. – Ved

+0

選民請讓我知道在評論中的原因:-) – Ved

0

試着解決這個問題。

List<Article > articleValueList = new ArrayList<Article >(); 
Criteria criteria = session.createCriteria(Article.class); 
articleValueList = (List<Article>) criteria.list(); 

您可以迭代此articleValueList以獲取數據庫中的值。