Для загрузки двух коллекций связанных сущностей минимальным количеством SQL-запросов в Java, можно использовать два подхода: использование JOIN-запросов и использование выделенных SQL-запросов.
1. Использование JOIN-запросов:
В случае, если связь между сущностями в базе данных уже задана при помощи внешнего ключа, можно использовать JOIN-запросы для загрузки данных из обеих таблиц в одном запросе. Позволяет избежать необходимости дополнительных запросов на получение связанных сущностей.
Пример:
String sqlQuery = "SELECT * FROM entity1 INNER JOIN entity2 ON entity1.id = entity2.entity1_id"; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sqlQuery); List<Entity1> entity1List = new ArrayList<>(); List<Entity2> entity2List = new ArrayList<>(); while (resultSet.next()) { Entity1 entity1 = new Entity1(); // заполнение полей entity1 из resultSet entity1List.add(entity1); Entity2 entity2 = new Entity2(); // заполнение полей entity2 из resultSet entity2List.add(entity2); } // Добавляем связь между сущностями for (int i = 0; i < entity1List.size(); i++) { entity1List.get(i).setEntity2(entity2List.get(i)); }
2. Использование выделенных SQL-запросов:
Если связь между сущностями не задана или требуется более сложная логика загрузки данных, можно использовать отдельные SQL-запросы для получения данных из каждой таблицы и затем объединить их в соответствии с логикой приложения.
Пример:
String sqlQuery1 = "SELECT * FROM entity1"; Statement statement1 = connection.createStatement(); ResultSet resultSet1 = statement1.executeQuery(sqlQuery1); List<Entity1> entity1List = new ArrayList<>(); while (resultSet1.next()) { Entity1 entity1 = new Entity1(); // заполнение полей entity1 из resultSet1 entity1List.add(entity1); } String sqlQuery2 = "SELECT * FROM entity2"; Statement statement2 = connection.createStatement(); ResultSet resultSet2 = statement2.executeQuery(sqlQuery2); List<Entity2> entity2List = new ArrayList<>(); while (resultSet2.next()) { Entity2 entity2 = new Entity2(); // заполнение полей entity2 из resultSet2 entity2List.add(entity2); } // Добавляем связь между сущностями for (Entity1 entity1 : entity1List) { for (Entity2 entity2 : entity2List) { if (entity1.getId() == entity2.getEntity1Id()) { entity1.setEntity2(entity2); break; } } }
В обоих случаях, для выполнения SQL-запросов, мы используем базовые инструменты работы с базой данных в Java, такие как JDBC (Java Database Connectivity). В примерах использованы стандартные классы Statement
, ResultSet
и методы выполнения executeQuery()
. Не забудьте заменить Entity1
и Entity2
на фактические классы сущностей, а также настроить соединение с базой данных.