powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Непонятное поведение JPA/Hibernate
11 сообщений из 11, страница 1 из 1
Непонятное поведение JPA/Hibernate
    #38554175
maksaimer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим есть 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
Непонятное поведение JPA/Hibernate
    #38554178
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная постановка задачи. У вас есть P связаный с двумя категориями. Поэтому при выборке Р по любым критериям, в списке должно быть две категории. Если вам нужны категории, то выбирайте их, а не Р.
Как вариант, можно запросом вернуть пары Р и категорию. Но в спике Р должно быть столько категорий сколько их в базе.
...
Рейтинг: 0 / 0
Непонятное поведение JPA/Hibernate
    #38554294
maksaimer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я прекрасно понимаю, что подход слегка нестандартный, но в контексте задачи он является самым локаничным и простым. Больше интересует вопрос почему hibernate себя так ведет?
...
Рейтинг: 0 / 0
Непонятное поведение JPA/Hibernate
    #38554328
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maksaimerЯ прекрасно понимаю, что подход слегка нестандартный, но в контексте задачи он является самым локаничным и простым. Больше интересует вопрос почему hibernate себя так ведет?
Я ведь объяснил выше. Давайте повторю. Задача хибера дать вам слепок состояния в БД в виде объектов. Ваш запрос выбирает Parent, у которого две категории. Поэтому хибер вам старается выдать обе категории, согласно состоянию сущности в БД.
Если вам нужны Child, а не Parent, то выбирайте Child. Вы же выбираете Parent и удивляетесь что у него столько же Child сколько и в базе.
...
Рейтинг: 0 / 0
Непонятное поведение JPA/Hibernate
    #38554355
maksaimer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

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

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

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

Объясните?

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

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

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

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

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

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

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

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

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


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