2012-03-01 23 views
1

我使用下面的查詢在休眠無法施展HibernateQuery resuly列表對象類

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

它說,它不能施放'[對象]''到Restaurant',可能是因爲你選擇了你的餐廳 – 2012-03-01 14:19:49

+0

的各個屬性對不起,u能解釋一下嗎?謝謝 – Zach 2012-03-01 14:21:42

回答

5

您的查詢不會返回Restaurant實體的實例。它從這個實體返回單個字段。這樣的查詢的結果是List<Object[]>,每個Object[]包含所有選擇的字段。

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

查詢可以返回多個對象和/或屬性在Object []數組:

如果你希望你的查詢餐廳的returninstances,它應該是

select r from Restaurant r where id = :id 

而且請不要使用連接來傳遞您的參數。使用命名參數作爲上述查詢。

+0

我嘗試過的方式,它的工作原理查詢q = session.createQuery(「從餐廳其中id =:id」); \t q.setInteger(「id」,id);我可以使用createSQLQuery並獲得相同的結果嗎? – Zach 2012-03-01 14:46:55

+1

爲什麼你想使用SQL查詢,因爲這個HQL查詢做你想要的? – 2012-03-01 15:34:02

0

簡單:

Restaurant rest = (Restaurant)session.get(Restaurant.class, id); 
相關問題