Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Непонятное поведение JPA/Hibernate / 11 сообщений из 11, страница 1 из 1
07.02.2014, 23:17
    #38554175
maksaimer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
Допустим есть 2 сущности

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class Parent {
	long id;
	List<Child> children;
}

public class Child {
	long id;
	Parent parent;
	String category;
}



Допустим в одной транзакции я делаю запрос дважды (jpql):

Код: plsql
1.
2.
3.
select p from Parent p
	join fetch p.children c
where p.id = :id and c.category = :category



1 запуск: id = 3, category = 'category_1'
2 запуск: id = 3, category = 'category_2'

Почему при втором запуске в children попадают Child с 'category_1'???
Я понимаю что они кешируются, но зачем?
Может кто подскажет другой метод фильтра children?

Использовался hibernate-entitymanager/4.3.0.Final

Спасибо.
...
Рейтинг: 0 / 0
07.02.2014, 23:22
    #38554178
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
Странная постановка задачи. У вас есть P связаный с двумя категориями. Поэтому при выборке Р по любым критериям, в списке должно быть две категории. Если вам нужны категории, то выбирайте их, а не Р.
Как вариант, можно запросом вернуть пары Р и категорию. Но в спике Р должно быть столько категорий сколько их в базе.
...
Рейтинг: 0 / 0
08.02.2014, 09:29
    #38554294
maksaimer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
Я прекрасно понимаю, что подход слегка нестандартный, но в контексте задачи он является самым локаничным и простым. Больше интересует вопрос почему hibernate себя так ведет?
...
Рейтинг: 0 / 0
08.02.2014, 11:38
    #38554328
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
maksaimerЯ прекрасно понимаю, что подход слегка нестандартный, но в контексте задачи он является самым локаничным и простым. Больше интересует вопрос почему hibernate себя так ведет?
Я ведь объяснил выше. Давайте повторю. Задача хибера дать вам слепок состояния в БД в виде объектов. Ваш запрос выбирает Parent, у которого две категории. Поэтому хибер вам старается выдать обе категории, согласно состоянию сущности в БД.
Если вам нужны Child, а не Parent, то выбирайте Child. Вы же выбираете Parent и удивляетесь что у него столько же Child сколько и в базе.
...
Рейтинг: 0 / 0
08.02.2014, 13:08
    #38554355
maksaimer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
Blazkowicz,

вопрос в том, что я хочу выбрать Parent с фильтрацией children. Мне кажется вы меня не поняли. 2 запроса одинаковый ответ, хотя отличается категорией. Такого не должно быть.
...
Рейтинг: 0 / 0
08.02.2014, 13:36
    #38554364
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
maksaimerвопрос в том, что я хочу выбрать Parent с фильтрацией children.

Тогда почему вас волнует количество children?

maksaimer Мне кажется вы меня не поняли.

Объясните?

maksaimer 2 запроса одинаковый ответ, хотя отличается категорией. Такого не должно быть.
Почему? Если у Parent две категории. Вы первый раз ищите Parent по первой категегории и находите его. Ищете по второй категории и тоже находите его. Ноу Parent две категории, его состояние в БД не изменится вашим SELECT запросом.
...
Рейтинг: 0 / 0
08.02.2014, 14:15
    #38554384
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
maksaimer,
привёл бы код, запросы и результаты в лог
...
Рейтинг: 0 / 0
08.02.2014, 18:52
    #38554554
maksaimer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
Blazkowicz,

Категория находится в таблице Child, а не в Parent.

Я выбираю Parent, но также хочу отфильтровать children, что не совсем правильно выходит.

В первом запросе все верно, во втором результат первого, хотя children должны быть другие, так как филтруются уже по другой категории.
...
Рейтинг: 0 / 0
08.02.2014, 20:46
    #38554607
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
Вам лучше наверное так выбирать:

http://stackoverflow.com/questions/6877857/jpa-query-that-returns-multiple-entities
...
Рейтинг: 0 / 0
09.02.2014, 10:32
    #38554840
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
maksaimerBlazkowicz,

Категория находится в таблице Child, а не в Parent.

Я выбираю Parent, но также хочу отфильтровать children, что не совсем правильно выходит.

В первом запросе все верно, во втором результат первого, хотя children должны быть другие, так как филтруются уже по другой категории.
Когда вы выбираете Parent то и фильтровать мы можете только Parent. Вы даже не пытаетесь понять то что я выше написал и повторяете одно и тоже как мантру. Я с вашей моделью не знаком, поэтому глупо с вашей стороны придираться к словам. Child или "категория" - какая разница в данном случае?
...
Рейтинг: 0 / 0
09.02.2014, 10:34
    #38554842
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение JPA/Hibernate
ЛагманВам лучше наверное так выбирать:

http://stackoverflow.com/questions/6877857/jpa-query-that-returns-multiple-entities
Именно это я и имел ввиду в первом ответе. Только обозвал Child категорией, чем вероятно запутал автора темы.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Непонятное поведение JPA/Hibernate / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]