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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPA: getResultList() дает не верный ответ 
:(
    Опции темы
Andrey1
Дата 23.10.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



С удивлением (и трудом) обнаружил, что getResultList() дает не верный ответ. Код:
Код

em.createQuery("select o from Object o where " +
                " o.aId = :aId" +
                " and " +
                "o.isB = :isB" +
                " and " +
                "o.cId = :cId"
                )
                .setParameter("aId", new Long(aId).intValue())
                .setParameter("isB", 1)
                .setParameter("cId", cId)
                .getResultList();

возвращаются объекты, которых нет в базе:
1) количество сущностей совпадает;
2) некоторые объекты совпадают с реальными в базе;
3) у некоторых объектов ключи поменялись местами;
4) у некоторых объектов - старое значение полей с новыми значениями ключей.

Не понимаю, из-за чего такое могло получиться?

PS. Реализация JPA - Hibernate.

Это сообщение отредактировал(а) Andrey1 - 1.11.2009, 12:50


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
Maksym
Дата 24.10.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



  • Покажи класс Object
  • Покажи ddl таблицы на которую мапится Object и желательно фрагмент (несколько строк) данных.
  • Включи в persistence.xml:
    Код

            <properties>
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.format_sql" value="true" />
            </properties>

    и покажи какой sql генерит твой orm фреймворк на этот запрос.


Это сообщение отредактировал(а) Maksym - 24.10.2009, 00:44
PM MAIL   Вверх
Andrey1
Дата 24.10.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Эту ситуацияю через некоторое время трудно воспроизвести, из-за того, что система все время работает.

А при перегрузке приложения - ошибка пропадает. 

Кроме того, есть еще другой экземпляр объекта, который выдает верный ответ. 

Так что баг видимо в настройках, либо неправильной работе с Entity Manager или что-то вроде того (в системе еще используются простые Native Query типа `UPDATE OBJECT SET is_b = 0').

Maksym, в следущий раз как зафиксирую ошибку - постараюсь привести те данные.

Вставил дополнительную "отчитску" и пока что проблема больше не повторяется:
Код

            if (em.getTransaction() != null)
                if (em.getTransaction().isActive()) em.flush();
            em.clear();


P.P.S: Таки нет, отчистка не помогла :(. Сейчас пробую регулярно закрывать/открывать entity manager...

Это сообщение отредактировал(а) Andrey1 - 1.11.2009, 12:51


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
Joss
Дата 1.11.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А попробуй отключить кеширование в Hibernate. И посмотрим, будет ли возникать ошибка.
PM MAIL   Вверх
Andrey1
Дата 3.11.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Joss @  1.11.2009,  14:10 Найти цитируемый пост)
А попробуй отключить кеширование в Hibernate. И посмотрим, будет ли возникать ошибка. 

После того, как начал регулярно закрывать/открывать entity manager, проблема пока не повторяется. 
Если повторится - то нужно будет думать дальше.

Кеш я не включал. Может он автоматически включается, конечно.


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
Akeem
Дата 7.12.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Andrey1, 
А где ты открываешь/закрываешь ентити менеджер?  До и после выборки?

У меня сейчас та же проблема. 


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

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


Опытный
**


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

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



Цитата(Akeem @  7.12.2009,  19:03 Найти цитируемый пост)
А где ты открываешь/закрываешь ентити менеджер?  До и после выборки?

Как можно раньше нужно его закрывать, я так понял.

Я обычно в конце цикла закрываю.


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
Akeem
Дата 8.12.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Andrey1, 
те делается EntityManagerFactory.createEntityManager(); перед циклом а после него em.close() ?

сколько времени занимает такое постоянное открытие закрытие? У меня подозрения что довольно много. 


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

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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