Внутреннее объединение трех столов в Java DTO - PullRequest
2 голосов
/ 03 июня 2019

Я столкнулся со следующей проблемой ... enter image description here

Я пытаюсь получить список java из ProcessDTO объекта как process, так и subprocess таким образом:

[{"process": {
   "code": "AB",
   "name": "Proc1"
   "subprocesses": 
    [{"code": "cd", "name": "subProc1"}],
    [{"code": "ef", "name": "subProc2"}],
    [{"code": "gh", "name": "subProc3"}]
  }
}]

Это то, что у меня есть до сих пор:

SELECT distinct C.code as process_code, C.name as process_name, A.code as subprocess_code, A.name as subprocess_code FROM subprocess A 
inner join zone B
    on A.id = B.subprocess_id
inner join process C
    on C.id = B.process_id
    ORDER BY C.code;

Но когда я создаю класс DTO:

public class ProcessDto {

    private Long id;
    private String code;
    private String name;
    private List<Subprocess> subprocess;

}

Иquery:

@RepositoryRestResource(itemResourceRel = "process", collectionResourceRel = "processes", path = "process")
public interface ProcessDataRestRepository extends JpaRepository<Process, Long> {

    @Query("Select p.code, p.name, sp.code, sp.name " +
            "from Process p " +
            "inner join Zone z on p.id = z.process " +
            "inner join Subprocess sp on sp.id = z.subprocess")
    List<ProcessDto> findProcessesAndSubprocesses();

}

Я получаю следующую ошибку:

org.springframework.core.convert.ConverterNotFoundException: не найден конвертер, способный к конвертации из типа [org.springframework.data.jpa.repository.query.AbstractJpaQuery $ TupleConverter $ TupleBackedMap] введите [dto.ProcessSubprocess]

Я не уверен, что это правильный подход.

Грязный способбыло бы сделать findAll процессов, сохранить в объекте, затем итерировать их и найти все подпроцессы ...

Есть ли какой-либо другой способ получить все из де BBDD и иметь его в объекте?

1 Ответ

3 голосов
/ 03 июня 2019

Создайте интерфейс из этого DTO, чтобы Spring Engine мог подобрать его и автоматически создать объект результата:

public interface ProcessDto {

    Long getId();
    String getCode();
    String getName();
    String getSubprocessName();

}

Подробнее по теме здесь

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