JPA条件构建器,如何获取jsonb列中列表的第一个元素

问题描述

我有一个Postgresql数据库,其表Registry的列json_data的类型为jsonb。 JSON看起来像:

{
  id: 1,users: [
    {name : "John",surname: "Doe",Metadata: {createdAt: "some LocalDateTime value"}}
  ]
}

重点是,我需要从列表“用户”中获取一个元素,然后从“元数据”中获取值“ createdAt”。

data->'users'->0->'Metadata'->>'createdAt'

我需要使用JPA规范和条件构建器,检查createdAt是否是greaterThanorEqualTo某个日期。

我已经创建了执行此操作的功能

    private val startRange: (root: Root<RegistryEntity>,criteriaBuilder: CriteriaBuilder,filtrationCriteria: FiltrationCriteria) -> Predicate =
            { root,criteriaBuilder,filtrationCriteria ->
                val jsonPath = criteriaBuilder.function("jsonb_extract_path_text",String::class.java,root.get<String>("jsonData"),criteriaBuilder.literal("users"),criteriaBuilder.literal("0"),criteriaBuilder.literal("Metadata"),criteriaBuilder.literal("createdAt")).`as`(LocalDateTime::class.java)
                criteriaBuilder.greaterThanorEqualTo(jsonPath,filtrationCriteria.startDate)
            }

不幸的是我遇到错误

CAST函数应仅包含2个参数

您知道如何解决该问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)