我正在使用以下查询从hibernate中的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);
我再次得到同样的例外。我如何用hibernate做到这一点?
由于
答案 0 :(得分:5)
您的查询不会返回Restaurant实体的实例。它返回此实体的各个字段。此类查询的结果是List<Object[]>
,每个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
请不要使用连接来传递参数。使用命名参数作为上述查询。
答案 1 :(得分:0)
简单如下:
Restaurant rest = (Restaurant)session.get(Restaurant.class, id);