Один выбор SQL с левым соединением с последующим сопоставлением в коде или множественный выборJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Один выбор SQL с левым соединением с последующим сопоставлением в коде или множественный выбор

Сообщение Anonymous »


У меня вопрос, скорее всего глупый, по поводу выбора запросов в спящем режиме. У меня есть объект 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-й выглядят немного сложнее, к тому же у меня не так много записей, и, возможно, это излишество.

Правильны ли мои решения и какое из них лучше? Я уверен, что есть лучшее решение, но не могу его понять.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»