Один выбор SQL с левым соединением с последующим сопоставлением в коде или множественный выбор ⇐ JAVA
Один выбор SQL с левым соединением с последующим сопоставлением в коде или множественный выбор
У меня вопрос, скорее всего глупый, по поводу выбора запросов в спящем режиме. У меня есть объект A с отношением oneToMany к другому объекту B (A.id_key = B.id_status).
Схема:
создать таблицу A ( целое число id_key не равно нулю основной ключ, имя varchar(255) не равно нулю, ); Схема Б:
создать таблицу Б ( целое число id_status не равно нулю, целое число id_reason не равно нулю, первичный ключ (id_status, id_reason) ); Мне нужно получить все объекты A с некоторыми критериями, а также все объекты B внутри с некоторыми критериями.
У меня есть 3 идеи:
[*]
2 выбирает. Я получаю все пятерки, соответствующие моим условиям. Затем я создаю новый выбор с идентификаторами A:
createQuery("ВЫБЕРИТЕ b.idStatus как idStatus,"+ "b.idReason как idReason, " + «ОТ Б б»+ "где b.idStatus в :ids") .setParameter("идентификаторы",идентификаторы) Затем я группирую объекты B и сопоставляю их с A:
Map bMap= bList.stream() .collect(Collectors.groupingBy(B::getIdStatus)); для (A a : aList) { List bList = bMap.get(a.getNumStatus); а.setBList(bList); } [*]1 выберите с помощью левого соединения, а затем сгруппируйте по a.id_key
ВЫБЕРИТЕ a.id_key, b.id_reason, ИЗ А как ЛЕВОЕ СОЕДИНЕНИЕ B как b ВКЛ id_key = id_status #WHERE некоторые условия
А затем то же самое, что и для первого подхода: группировка и сопоставление.
[*]
Используйте аннотацию hibernate @OneToMany с помощью Eager Fetch и просто:
ВЫБЕРИТЕ ИЗ А где что-то.
Мне не нравится третий вариант, потому что он создает дополнительный выбор для B для каждой сущности A в списке. Но, возможно, я просто не знаю, как заставить спящий режим использовать оператор SQL IN для аннотаций. Это нормально для собственного запроса, но в данном случае похоже, что это то же самое, что и для первого подхода, но я просто добавляю аннотацию, которая в других случаях мне не нужна.
Но 1-й и 2-й выглядят немного сложнее, к тому же у меня не так много записей, и, возможно, это излишество.
Правильны ли мои решения и какое из них лучше? Я уверен, что есть лучшее решение, но не могу его понять.
У меня вопрос, скорее всего глупый, по поводу выбора запросов в спящем режиме. У меня есть объект A с отношением oneToMany к другому объекту B (A.id_key = B.id_status).
Схема:
создать таблицу A ( целое число id_key не равно нулю основной ключ, имя varchar(255) не равно нулю, ); Схема Б:
создать таблицу Б ( целое число id_status не равно нулю, целое число id_reason не равно нулю, первичный ключ (id_status, id_reason) ); Мне нужно получить все объекты A с некоторыми критериями, а также все объекты B внутри с некоторыми критериями.
У меня есть 3 идеи:
[*]
2 выбирает. Я получаю все пятерки, соответствующие моим условиям. Затем я создаю новый выбор с идентификаторами A:
createQuery("ВЫБЕРИТЕ b.idStatus как idStatus,"+ "b.idReason как idReason, " + «ОТ Б б»+ "где b.idStatus в :ids") .setParameter("идентификаторы",идентификаторы) Затем я группирую объекты B и сопоставляю их с A:
Map bMap= bList.stream() .collect(Collectors.groupingBy(B::getIdStatus)); для (A a : aList) { List bList = bMap.get(a.getNumStatus); а.setBList(bList); } [*]1 выберите с помощью левого соединения, а затем сгруппируйте по a.id_key
ВЫБЕРИТЕ a.id_key, b.id_reason, ИЗ А как ЛЕВОЕ СОЕДИНЕНИЕ B как b ВКЛ id_key = id_status #WHERE некоторые условия
А затем то же самое, что и для первого подхода: группировка и сопоставление.
[*]
Используйте аннотацию hibernate @OneToMany с помощью Eager Fetch и просто:
ВЫБЕРИТЕ ИЗ А где что-то.
Мне не нравится третий вариант, потому что он создает дополнительный выбор для B для каждой сущности A в списке. Но, возможно, я просто не знаю, как заставить спящий режим использовать оператор SQL IN для аннотаций. Это нормально для собственного запроса, но в данном случае похоже, что это то же самое, что и для первого подхода, но я просто добавляю аннотацию, которая в других случаях мне не нужна.
Но 1-й и 2-й выглядят немного сложнее, к тому же у меня не так много записей, и, возможно, это излишество.
Правильны ли мои решения и какое из них лучше? Я уверен, что есть лучшее решение, но не могу его понять.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Изо всех сил пытаясь подвести итоги значений с SQL с левым соединением на нескольких таблицах
Anonymous » » в форуме Php - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
База данных комнат возвращает значение null с вложенными отношениями и левым соединением
Anonymous » » в форуме Android - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-