【问题标题】:How to join tables and get the json output using jooq如何使用 jooq 连接表并获取 json 输出
【发布时间】:2022-01-25 02:39:56
【问题描述】:
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 * from category left outer join course_category on category.id = course_category.category_id left outer join course on course_category.course_id = course.id"

如何实现?

【问题讨论】:

    标签: mysql spring-boot jooq


    【解决方案1】:

    你忘记分组了:

    .groupBy(CATEGORY.ID, CATEGORY.NAME)
    

    如果您在 CATEGORY.ID 上有一个主键(或唯一键),那么在 MySQL 中,按该键进行分组就足够了

    .groupBy(CATEGORY.ID)
    

    【讨论】:

    • 它正在工作,但是,如果一个类别中没有课程,它应该给出一个空数组,而是给出所有参数为空的课程对象。如何解决?
    猜你喜欢
    • 2016-04-13
    • 2016-11-18
    • 1970-01-01
    • 2015-12-02
    • 2017-01-26
    • 1970-01-01
    • 2017-12-03
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多