Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Spring, Hibernate, mySQL : ошибка при вызове setMaxResults

14K
17 февраля 2009 года
Irene_001
43 / / 29.07.2007
Здравствуйте.
работаю со Spring, Hibernate и mySQL 5.
mysql-connector-java-5.1.7
В общем вопрос в следующем: мне нужно сделать запрос:
 
Код:
SELECT * FROM myTable LIMIT 10


Я пишу следующее:
Код:
public List<MyTable> getMyData()
    {
        return (List) getHibernateTemplate().execute(
                new HibernateCallback() {
                    public Object doInHibernate(Session s)
                            throws HibernateException {
                     

                      Query query = s.createQuery("select p from Poems p");
                         query.setMaxResults(2);
 
                          return query.list();
                    }
                });
}

В итоге получаю ошибку:
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query

и
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 poems0_.Id_poem as Id1_1_, poems0_.PoemTitle as PoemTitle1_, poems0_.PoemText ' at line 1

но если query.setMaxResults закомментировать, то всё работает!

Гугл, ничего внятного не выдаёт: на форумах встречаю в основном следующее «It's a combined bug between MySQL and the MySql JDBC driver».
Только что делать дальше, не знаю. Подскажите пожалуйста, как можно избавиться от этой ошибки. Или как её обойти можно. :(
355
17 февраля 2009 года
&lt;SCORP&gt;
786 / / 21.10.2006
на mysql есть такой баг... но он датирован 2005 годом. я думаю, его должны были бы починить уже...
14K
17 февраля 2009 года
Irene_001
43 / / 29.07.2007
[QUOTE=<SCORP>;276180]на mysql есть такой баг... но он датирован 2005 годом. я думаю, его должны были бы починить уже...[/QUOTE]

по-моему не починили :( или я что-то делаю не так :confused:
так что буду благодарна любому совету :(
355
17 февраля 2009 года
&lt;SCORP&gt;
786 / / 21.10.2006
сейчас ничего не скажу. завтра на работе попробую
судя по всему, SQL выражение он какое-то составляет. покажи этот запрос - он в логах должен быть, если show_sql у хибера в true стоит
14K
17 февраля 2009 года
Irene_001
43 / / 29.07.2007
[QUOTE=<SCORP>;276183]сейчас ничего не скажу. завтра на работе попробую
судя по всему, SQL выражение он какое-то составляет. покажи этот запрос - он в логах должен быть, если show_sql у хибера в true стоит[/QUOTE]

Hibernate: select top ? poems0_.Id_poem as Id1_1_, poems0_.PoemTitle as PoemTitle1_, poems0_.PoemText as PoemText1_, poems0_.Author as Author1_, poems0_.WhoAdded as WhoAdded1_, poems0_.AdditionDate as Addition6_1_, poems0_.RedactDate as RedactDate1_ from Poems poems0_

а если ещё такую функцию добавить query.setFirstResult(1), то меняется вот так вот:
Hibernate: select limit ? ? poems0_.Id_poem as Id1_1_, poems0_.PoemTitle as PoemTitle1_, poems0_.PoemText as PoemText1_, poems0_.Author as Author1_, poems0_.WhoAdded as WhoAdded1_, poems0_.AdditionDate as Addition6_1_, poems0_.RedactDate as RedactDate1_ from Poems poems0_
3.7K
17 февраля 2009 года
bioflash
169 / / 01.10.2005
Как-то странно выглядит первое SQL выражение - кажись в MySQL нету "top" (хотя может в новой версии - не знаю).
Может у вас в конфигурации Hibernate стоит диалект "MSSQL" или старая версия Hibernate.
355
17 февраля 2009 года
&lt;SCORP&gt;
786 / / 21.10.2006
покажи конфигурацию хибера
14K
17 февраля 2009 года
Irene_001
43 / / 29.07.2007
<SCORP> и bioflash, спасибо огромное за наводящие вопросы! Я пересмотрела свой конфиг файл, и обнаружила ошибку.
У меня были след. строки:

 
Код:
<property name="hibernateProperties">
    <props>
       <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
       <prop key="hibernate.show_sql">true</prop>
         …

   </props>
</property>


А должно было быть:
 
Код:
<property name="hibernateProperties">
    <props>
          <prop key="hibernate.connection.dialect">
                    org.hibernate.dialect.HSQLDialect
          </prop>
          <prop key="hibernate.show_sql">true</prop>
            …
    </props>
</property>

Если б не вы я б ещё долго ломала голову!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог