Я использую 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)
)
Ссылка на мою схему схемы Визуализация диаграммы базы данных
Объяснение диаграммы:
Микросервис имеет много-много взаимосвязей с SolutionDefinistion
ProjectFile имеет отношение один ко многим с Microservice
ProjectFile имеет отношение один ко многим с SolutionDefinition
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к моей модели данных