【问题标题】:Cannot Cast HibernateQuery resuly list to Object class无法将休眠查询结果列表转换为对象类
【发布时间】:2012-03-20 00:52:14
【问题描述】:

我正在使用以下查询从休眠中的 db 获取数据

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query q = session.createSQLQuery("select name,addr1,addr2,postal_code,country,email," +
                "tel1,tel2,HeadOffice_id,Subscription_id from Restaurant " +
                "where id=" +id);
session.getTransaction().commit();
Restaurant rest = (Restaurant)result.get(0);

但这是返回异常

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.hibernate.model.Restaurant

我也试过这种方法,不知道在做什么

AnnotationConfiguration config = new AnnotationConfiguration();  
config.addAnnotatedClass(Restaurant.class);  
SessionFactory factory= config.configure().buildSessionFactory();  
Session session =factory.getCurrentSession();
session.beginTransaction();
Query q = session.createSQLQuery("select name,addr1,addr2,postal_code,country,email," +
                    "tel1,tel2,HeadOffice_id,Subscription_id from Restaurant " +
                    "where id=" +id);
java.util.List<Restaurant> result = (List<Restaurant>)q.list();
session.getTransaction().commit();
Restaurant rest = (Restaurant)result.get(0);

我又遇到了同样的异常。我怎么能用休眠来做到这一点?

谢谢

【问题讨论】:

  • 它说它不能将Object[] 转换为Restaurant,可能是因为您选择了餐厅的个别属性
  • 对不起,你能解释一下吗?谢谢

标签: java hibernate hql sessionfactory


【解决方案1】:

您的查询不返回 Restaurant 实体的实例。它从该实体返回各个字段。此类查询的结果是一个List&lt;Object[]&gt;,每个Object[] 都包含所有选定的字段。

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-select:

查询可以将多个对象和/或属性作为 Object[] 类型的数组返回:

如果你想让你的查询返回餐厅的实例,它应该是

select r from Restaurant r where id = :id

请不要使用串联来传递您的参数。使用命名参数作为上述查询。

【讨论】:

  • 我尝试了这种方式并且它有效 Query q = session.createQuery("from Restaurant where id = :id"); q.setInteger("id", id);我可以使用 createSQLQuery 并获得相同的结果吗?
  • 为什么要使用 SQL 查询,因为这个 HQL 查询可以满足您的需求?
【解决方案2】:

就这么简单:

Restaurant rest = (Restaurant)session.get(Restaurant.class, id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2012-03-09
    • 2021-05-03
    相关资源
    最近更新 更多