如何使用 jooq 连接表并获取 json 输出

How to join tables and get the json output using jooq

dslContext.select(
                    jsonObject(
                            key("id").value(CATEGORY.ID),
                            key("courses").value(
                                    jsonArrayAgg(
                                            jsonObject(
                                                    Arrays.stream(COURSE.fields())
                                                            .map(i -> key(CamelcaseConverter.snakeToCamel(i.getName())).value(
                                                                    i))
                                                            .collect(
                                                                    Collectors.toList())
                                            )
                                    )
                            )
                    )
            ).from(CATEGORY)
            .leftJoin(COURSE_CATEGORY).on(CATEGORY.ID.eq(COURSE_CATEGORY.CATEGORY_ID))
            .leftJoin(COURSE).on(COURSE.ID.eq(COURSE_CATEGORY.COURSE_ID)).fetchInto(JSONObject.class)

我得到的输出:

[
{
    "courses": [
        {
            "id": 19
        },
        {
            "id": null
        }
    ],
    "name": "Exam1",
    "id": 1,
}

]

要求的输出是

[
{
    "courses": [
        {
            "id": 19
        }
    ],
    "name": "Exam1",
    "id": 1
},
{
    "courses":[],
    "name": "Exam2",
    "id": 2
}

]

需要执行的查询是 “select * 来自 category.id = course_category.category_id 上的类别左外连接 course_category = course_category.course_id = course.id 上的左外连接课程”

如何实施?

您忘记分组依据:

.groupBy(CATEGORY.ID, CATEGORY.NAME)

如果您在 CATEGORY.ID 上有一个主(或唯一)键,那么在 MySQL 中,按该

分组就足够了
.groupBy(CATEGORY.ID)