Невозможно привести список результатов HibernateQuery в класс Object
Я использую следующий запрос для извлечения данных из базы данных в спящем режиме
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?
Спасибо
2 ответа
Ваш запрос не возвращает экземпляры объекта Restaurant. Возвращает отдельные поля от этой сущности. Результатом такого запроса является List<Object[]>
каждый Object[]
содержащий все выбранные поля.
См. http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/:
Запросы могут возвращать несколько объектов и / или свойств в виде массива типа Object[]:
Если вы хотите, чтобы ваш запрос возвращал экземпляры ресторана, он должен быть
select r from Restaurant r where id = :id
И, пожалуйста, не используйте конкатенацию для передачи вашего параметра. Используйте именованные параметры в качестве запроса выше.
Так просто как:
Restaurant rest = (Restaurant)session.get(Restaurant.class, id);