Как получить сложную модель с результатом выбора оценки, используя fetchgoups и карту - PullRequest
2 голосов
/ 28 мая 2019

Я использую Jooq с Kotlin, и я хочу написать инструкцию, которая извлекает данные из запроса, который использует пару таблиц, используя оператор соединения (пример в приложении)

Проблема, с которой я сталкиваюсь, заключается в том, что яхочу отобразить результат в мою сложную модель, которая состоит из отношений один ко многим, а также многих ко многим.

Насколько я знаю, я знаю, что могу использовать операцию fetchgroups в Jooq для некоторых, как отображать записи, но я все ещене могу понять, как получить результат в мою модель.

моя модель:

data class MicroserviceDto(
  val microservice_id: Long = 1,
  val microservice_name: String? = "",
  val endpoint: String? = "",
  val mappings: String? = "",
  val solutionDefinitionMinimalDtoList: List<SolutionDefinitionDto> = emptyList(),
  val projectFileDtoList: List<ProjectFileDto> = emptyList()
)

data class SolutionDefinitionDto(
  val solution_definition_id: Long = 0L,
  val solution_definition_name: String = "",
  val solutionId: String = "",
  val solutionVersion: String = ""
)

data class ProjectFileDto(
  val project_file_id: Long = 1,
  val model: String = "",
  val relativePath: String = "",
  val fileContentDtoList: List<FileContentDto> = emptyList()
)

data class FileContentDto(
  val file_content_id: Long = 1,
  val content: ByteArray = ByteArray(0)
)

Ссылка на мою схему схемы Визуализация диаграммы базы данных

Объяснение диаграммы:

  1. Микросервис имеет много-много взаимосвязей с SolutionDefinistion

  2. ProjectFile имеет отношение один ко многим с Microservice

  3. ProjectFile имеет отношение один ко многим с SolutionDefinition

  4. FileContent имеет один ко многим с ProjectFile

Я создалпредставление для представления моего желаемого запроса со всеми таблицами и операторами соединения между ними.

Вот представление:

  CREATE OR REPLACE VIEW Microservice_Metadata_by_Microservice_Id AS
select
  # microservice
  M.id as `microservice_id`,
  M.name as `microservice_name`,
  M.mappings,
  M.endpoint,
  # solution definition
  SD.id as `solution_definition_id`,
  SD.name as `solution_definition_name`,
  SD.solutionId,
  SD.solutionVersion,
  # project file of microservice
  PF.id as `project_file_id`,
  PF.relativePath,
  PF.model,
  # file content data of project file
  FC.id as `file_content_id`,
  FC.content
from Microservice M
       # get project file
       left join Microservice_SolutionDefinition MSD
                 on MSD.microserviceId = M.id
       left join ProjectFile PF
                 on PF.microserviceId = M.id
  # get data content
       left JOIN FileContent FC
                 on PF.id = FC.projectFileId
  # get solutions of microservice
       left join SolutionDefinition SD
                 on SD.id = MSD.solutionDefinitionId;

Как я могу реализовать такой запрос Jooq dsl, который отображает ResultSetк моей модели данных

...