Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate JPA и Bulk Update - ругается парсер JPQL 
:(
    Опции темы
AJetman
Дата 29.8.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 16.8.2009

Репутация: 2
Всего: 2



В приложении использую Hibernate JPA. Столкнулся со следующей проблемой. Имеем запрос на обновление данных:

Код
 @Transactional
    public int cancelNotPayedOrders(int timeout) {
        final Calendar date = GregorianCalendar.getInstance();
        date.add(Calendar.SECOND, - timeout);

        return (Integer)getJpaTemplate().execute(new JpaCallback() {
            public Object doInJpa(EntityManager em) throws PersistenceException {
                int total = em.createQuery("UPDATE OrderEntity o SET o.status = ?1 WHERE o.status = ?2 AND o.time < ?3")
                        .setParameter(1, OrderEntity.OrderStatus.CANCEL)
                        .setParameter(2, OrderEntity.OrderStatus.PAYMENT)
                        .setParameter(3, date, TemporalType.TIMESTAMP)
                        .executeUpdate();

                return new Integer(total);
            }
        });
    }


Парсер Hibernate ругается на запрос, что присутствует неизвестный токен "ru" и запрос не отрабатывается. Включил дебаг и вижу следующее:
Код
UPDATE ru.xxxxxx.order.OrderEntity o SET o.status = ?1 WHERE o.status = ?2 AND o.time < ?3


С точки зрения JPQL все абсолютно верно, а парсер ругается на название пакета моего Entity. Исходя из того, что в SQL в запросе DELETE еще присутствует FROM, то попытался добавить FROM и для нашего запроса... И все сработало на ура. 

Порылся в коде парсера Hibernate - он видимо написан на ANTLR, т.к. видно что чем-то класс сгенерирован. И действительно, оказалось, что просто UPDATE вывалится в ошибку, а UPDATE FROM отработает на ура....

Это баг в Hibernate или так задумано? Hibernate последний, по крайней мере из официальных репозитариев Maven'a.

Крик души: я новичок в Java, но уже задолбался обходить различные глюки(недоработки) и рыться в Mailing List'aх...

Это сообщение отредактировал(а) AJetman - 29.8.2009, 13:05
PM   Вверх
Akeem
Дата 30.8.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: нет
Всего: 3



Странно у меня при подобном запросе на MySQL проблем небыло. Update UserEntity работал без From


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
AJetman
Дата 31.8.2009, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 16.8.2009

Репутация: 2
Всего: 2



Цитата(Akeem @ 30.8.2009,  17:31)
Странно у меня при подобном запросе на MySQL проблем небыло. Update UserEntity работал без From

В официальном описании JPQL тоже без From, конечно же. Это я просто обошел этот баг(или все же не баг) таким образом, посмотрев, как работает парсер.

БД PostgreSQL, но это роли не играет.

У меня в Maven подключена всего одна зависимость: hibernate-entitymanager-3.4.0.GA.jar, которая тянет за собой:
hibernate-annotations-3.4.0.GA.jar
hibernate-commons-annotations-3.1.0.GA.jar
hibernate-core-3.3.0.SP1.jar

Дошло, что можно попробовать подсунуть еще более свежий corе, если добавить свою зависимость на него. Попробую - отпишусь.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.