Hibernate createNativeQuery - получить более одной сущности - PullRequest
0 голосов
/ 22 ноября 2018

Я использую следующий код для выполнения собственного запроса SQL с помощью hibernate:

    Query zonesQuery = session.createNativeQuery(
        "Select * \n" +
           "FROM dbo.Structure AS S\n" +
           "JOIN dbo.StructureLocationType AS SLT ON SLT.StructureId = S.Id\n" +
           "WHERE SLT.LocationTypeId = :lc").addEntity(StructureEntity.class);

zonesQuery.setParameter("lc", locationTypeID);
List<StructureEntity> zones = zonesQuery.list();

Так что это работает, и теперь я получаю список StructureEntity

, потому что мой sql-запрос "join"из таблицы StructureLocationType есть ли возможность получить всю строку StructureLocationType, все еще используя один запрос?

Спасибо.

1 Ответ

0 голосов
/ 22 ноября 2018

Вы не можете получить несколько объектов из одного запроса.

Но вы можете выбрать, какие столбцы вы хотите, и затем выполнить итерацию возвращенного массива объектов:

Запрос:

SELECT s.id, s.someColumn, slt.id, slt.structureId
FROM dbo.Structure AS s
JOIN dbo.StructureLocationType AS slt on slt.structureId = s.id
WHERE slt.locationTypeId = :lc

Затем выполнить итерацию по массиву объектов:

List<Object[]> result = query.getResultList();

Или вы можете создать представление в вашей базе данных и сопоставить его с сущностью java, используя аннотацию Table, как будто это обычная таблица:

@Entity
@Table(name = "STRUCTURE_LOCATION_TYPE_VIEW")
public class StructureAndLocationType {
    // ...
}

Я думал, что есть способсопоставить запрос с объектом, не создавая представление БД, но не смог найти его прямо сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...