【问题标题】:How to use mysql "json_contains" with JPA Specification如何在 JPA 规范中使用 mysql“json_contains”
【发布时间】:2020-01-14 04:29:24
【问题描述】:

我想使用 JPA 规范来查询我的数据。 该列由 @Type(type = "json") 注释。 我用这些代码生成了谓词:

 cb.like(root.get<String>("exampleColumnName"), "%queryParam%")

最后,我得到了这样的sql,它不能从mysql中得到任何东西:

select * from XXX where exampleColumnName like '"%queryParam%"'

但是除了sql是

select * from XXX where exampleColumnName like '%queryParam%'

我将代码跟踪到 com.vladmihalcea.hibernate.type.json.internal.JsonTypeDescriptor 并发现“unwrap”方法与 org.hibernate.type.descriptor.java.StringTypeDescriptor 不同。

我想为@Type(type = "json"); 注释的列生成一个LikePredicate;

【问题讨论】:

标签: jpa


【解决方案1】:

最后,我找到了一个方法“function”可以做我想做的事情

return Specification { root, _, cb ->
            val predicate = cb.conjunction()
            val expressions = predicate.expressions

            if (!queryForm.areaCode.isNullOrBlank()) {
                expressions.add(
                    cb.equal(
                        cb.function(
                            "JSON_CONTAINS",
                            String::class.java,
                            root.get<String>("areaCodeList"),
                            cb.literal(jacksonObjectMapper().writeValueAsString(arrayOf(queryForm.areaCode))),
                            cb.literal('$')
                        ), "1"
                    )
                )
            }
            predicate
        }

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 2023-03-18
    • 2021-11-12
    • 2022-11-21
    • 2018-06-18
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多