Сопоставьте любую коллекцию с помощью NamedNativeQuery и SqlResultSetMapping - PullRequest
0 голосов
/ 11 июня 2019

Так что я пишу нативные запросы, потому что они очень сложны, чтобы получить все необходимые данные и так далее.В настоящее время я сталкиваюсь с проблемой, которая обычно выполняется Hibernate / JPA и т. Д.

Представьте себе следующее:

@Entity
FooEntity{
     @Id
     public Long id;
     @ManyToMany
     public List<FeeEntity> feeEntities;
}

@Entity
FeeEntity{
     @Id
     public Long id;
     @Column
     public String name;
}

И немного DTO

FooDTO{
     private final Long id;
     private final List<FeeDTO> someStrings;

     public FooDTO(Long id, List<FeeDTO> feeDtos){
          ...
     }
}

My @SqlResultSetMapping выглядит в основном как

@SqlResultSetMapping(name = "FooDTO", 
     classes = @ConstructorResult(targetClass = FooDTO.class, columns = {
          @ColumnResult(name = "id", type = Long.class),     
          //TODO @ColumnResult(name = "feeDtos", type = FeeDtos.class)     
     })
)

Именованный собственный запрос выглядит примерно так:

@NamedNativeQueries({
    @NamedNativeQuery(
                name = "FooData",
                query = "SELECT MAINSELECT.ID AS id, " +
                        "???" +
                        " FROM Foo MAINSELECT WHERE ... " +
                        ...,
                resultSetMapping = "FooDTO")
})

Как мне написать собственный запрос?Возможно ли это даже без подзапроса или мне нужно делать / выполнять подзапрос для каждого datarow результата?Я не смог найти что-то на любимом Google.

1 Ответ

0 голосов
/ 11 июня 2019

Это невозможно.

Результатом запроса SQL всегда является таблица.Таким образом, нет вложенных таблиц и, следовательно, вы не можете сопоставить их с коллекцией.

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