我试图使用Hibernate显示酒店的名称。但是当我在迭代我从数据库获得的酒店列表时,iter.next()给出了一个ClassCastException,表示无法将Object强制转换为酒店类。这是我的方法。
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;
}
我已经使用Generics作为List和Iterator但是无法弄清楚错误。任何帮助表示赞赏。
答案 0 :(得分: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
}