@parkito

Почему не выполняется sql-запрос в Hibernate?

Здравствуйте. Помогите пожлуйста решить проблему.

Пишу функцию, которая показывает таблицу из БД. Использую MySQL-ный диалект
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>


Написанная таким образом функция работает

public void getTariffsList() {
        Session session = Factory.getSessionFactory().openSession();
        Transaction transaction = null;
        try {
            transaction = session.beginTransaction();
            String sql = "FROM Tariff";
            System.out.println(sql);
            List tariffs = session.createQuery(sql).list();
            for (Iterator iterator =
                 tariffs.iterator(); iterator.hasNext(); ) {
                Tariff tariff = (Tariff) iterator.next();
                System.out.print("id: " + tariff.getId());
                System.out.print("  title: " + tariff.getTitle());
                System.out.println();
            }
            transaction.commit();

        } catch (HibernateException e) {
            if (transaction != null) transaction.rollback();
            e.printStackTrace();
        } finally {
            session.close();
        }

    }


Однако, когда хочу использовать, List tariffs = session.createSQLQuery(sql).list();
соответсвенно изменив запрос,
String sql = "Select * FROM Tariff";
вылетает следующий эксепшн.

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DAO.Hibirnate.Tariff


Подскажите, пожалуйста, что не так с List tariffs = session.createSQLQuery(sql).list();и как можно это исправить.
  • Вопрос задан
  • 552 просмотра
Решения вопроса 1
@sirs
Ваша ошибка связана с тем, что hibernate возвращает List и не знает какой будет тип во время компиляции. Нужно добавить преобразование к нужному Вам типу.
Попробуйте
List<Tariff> tariffs = (List<Tariff>) session.createSQLQuery(sql).list();


и @SuppressWarnings("unchecked") если смущают warnings.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jaxtr
@jaxtr
JavaEE/Spring-разработчик
Что бы из SQL-запроса Hibernate возвращал объекты конкретного типа, нужно этот тип явно указывать при помощи метода addEntity():
List tariffs = session.createSQLQuery(sql).addEntity(Tariff.class).list();


Да и вопрос - зачем использовать SQL в данном случае?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 нояб. 2024, в 17:41
2000 руб./за проект
27 нояб. 2024, в 17:26
1 руб./за проект
27 нояб. 2024, в 17:17
3000 руб./за проект