Допустим, у меня есть следующая структура базы данных:
В красном вы видите ТАБЛИЦЫ, а в черном ПОЛЯ
Структура (s) связаны с LocationType с использованием StructureLocationType
Теперь мне нужно получить список структур, которые принадлежат LocationType:
// get LocationType
LocationTypeEntity locationTypeEntity = databaseManager.selectLocationType(session, locationTypeID);
// get list of StructureLocationType(s)
List<StructureLocationTypeEntity> structureLocationTypeEntities = databaseManager.selectStructureLocationTypes(session, locationTypeID);
// get list of Structures(s)
List<StructureEntity> structures = new ArrayList<>();
for (StructureLocationTypeEntity structure: structureLocationTypeEntities)
{
structures.add(databaseManager.selectStructure(session, structure.getStructureId()));
}
return structures;
Мои вспомогательные методы для извлечения данных с использованием hibernate:
public LocationTypeEntity selectLocationType(Session session, int id)
{
session.beginTransaction();
LocationTypeEntity locationTypeEntity = session.get(LocationTypeEntity.class, id);
session.getTransaction().commit();
return locationTypeEntity;
}
public List<StructureLocationTypeEntity> selectStructureLocationTypes(Session session, int locationTypeId)
{
session.beginTransaction();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<StructureLocationTypeEntity> query = builder.createQuery(StructureLocationTypeEntity.class);
Root<StructureLocationTypeEntity> root = query.from(StructureLocationTypeEntity.class);
query.select(root).where(builder.equal(root.get("locationTypeId"), locationTypeId));
Query<StructureLocationTypeEntity> q = session.createQuery(query);
List<StructureLocationTypeEntity> locationTypeEntities = q.getResultList();
session.getTransaction().commit();
return locationTypeEntities;
}
public StructureEntity selectStructure(Session session, int structureID)
{
session.beginTransaction();
StructureEntity structure = session.get(StructureEntity.class, structureID);
session.getTransaction().commit();
return structure;
}
Так что это уже кажется неэффективным, но при условии, что было 3 Структуры , связанных с LocationType , для получения списка структур требуется ~ 1200 мс.Я использую его для тестирования автоматизации, поэтому теоретически это должна быть скорость света, но я считаю, что мне нужно улучшить ее, был бы признателен, если кто-то может помочь мне улучшить мой код, чтобы, возможно, выполнить его с помощью одного запроса?(теперь очевидно, что он отправляет несколько запросов к базе данных)
Спасибо.