2017-04-20 53 views
1

我試圖顯示使用Hibernate的酒店的名稱。但是當我迭代從數據庫中獲得的酒店列表時,iter.next()會給出一個ClassCastException,表示Object不能轉換爲Hotel類。這是我的方法。ClassCastException與Java與泛型的列表迭代器

public List<Hotel> getAllHotels() 
{ 
    List<Hotel> contracts = new ArrayList<Hotel>(); 
    Transaction tx = null; 
    Session session = SessionFactoryUtil.getCurrentSession(); 
    try 
    { 
     tx = session.beginTransaction(); 
     contracts = session.createSQLQuery("select * from HOTEL").list(); 
     System.out.println("*** Content of the Hotel Table ***"); 
     System.out.println("*** Start ***"); 
     for (Iterator<Hotel> iter = contracts.iterator(); iter.hasNext();) { 
      Hotel h = iter.next(); 
      System.out.println(h.getHotelName()); 
     } 
     System.out.println("*** End ***"); 
     tx.commit(); 
    } 
    catch(RuntimeException e) 
    { 
     if(tx != null && tx.isActive()) 
     { 
      try 
      {// Second try catch as the rollback could fail as well 
       tx.rollback(); 
      } 
      catch(HibernateException e1) 
      { 
       System.out.println("Error rolling back transaction"); 
      } 
      // throw again the first exception 
      throw e; 
     } 
    } 
    return contracts; 
} 

我已經使用泛型的列表和迭代器,但無法找出錯誤。任何幫助表示讚賞。

+1

看起來像迭代的對象有不同的類?你可能想添加你的異常棧跟蹤 – GhostCat

+0

不同的類意味着什麼? – Lak

回答

2

看起來您可能需要在創建SQLQuery時添加實體。

參考https://www.mkyong.com/hibernate/hibernate-native-sql-queries-examples/

session.createSQLQuery("select * from HOTEL").addEntity(Hotel.class).list(); 

或者,如果使用當前的代碼,通過對象數組

List result = query.list(); 
for(Object object : data) 
     { 
      //Logic 
     } 
+0

調用addEntity()解決了這個問題。非常感謝:) – Lak

+0

很高興幫助! –