标准生成器:如何使用 JSON_OBJECT 的标签

问题描述 投票:0回答:1

我有一个要求,需要使用条件生成器在运行时创建 jsonobject。让我知道如何才能实现同样的目标。我使用Mysql作为数据库。

预期的sql:

 select project_id,  json_arrayagg(json_object('name', project_name, 'description', description)) from user_projects  group by project_id

到目前为止的代码..

        CriteriaQuery<Tuple> criteriaQuery = cBuilder.createTupleQuery();

        Root<UserProjects> userProjectsRoot = criteriaQuery.from(UserProjects.class);

         // NOT SURE HOW TO INSERT LABELS i.e., 'name' and 'description' in json_object function.. 
        criteriaQuery.multiselect(userProjectsRoot.get("projectId").alias("Id"),
                cBuilder.function("json_arrayagg", String.class,
                        cBuilder.function("json_object", String.class,
                                userProjectsRoot.get("projectName"),
                                userProjectsRoot.get("description"))).alias("json"));

        criteriaQuery.groupBy(userProjectsRoot.get("projectId"));

如有任何帮助,我们将不胜感激。

hibernate criteria-api
1个回答
4
投票

显然,在 SQL 中,标签只是字符串文字,因此这里也使用字符串文字。

    criteriaQuery.multiselect(userProjectsRoot.get("projectId").alias("Id"),
            cBuilder.function("json_arrayagg", String.class,
                    cBuilder.function("json_object", String.class,
                            cBuilder.literal("name"), userProjectsRoot.get("projectName"),
                            cBuilder.literal("description"), userProjectsRoot.get("description"))).alias("json"));
© www.soinside.com 2019 - 2024. All rights reserved.