如何在JPA/Hibernate中结合使用JSON_EXISTS和CriteriaBuilder

balp4ylt  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(156)

我尝试对以列表形式存储值的列使用json_exists函数-即[["a", "b"], ["c", "d"]]
使用criteriaBuilder中的json_Existes函数检查该列中是否有给定子列表。例如,如果给定值是该列表的子集-[“a”,“b”],则返回TRUE。我尝试使用下面的代码,但失败了。

predicates.add((cb.function("JSON_EXISTS", String.class, new HibernateInlineExpression(cb, "column_name"),
                                    cb.literal()
                                    new HibernateInlineExpression(cb,
                                            "'$.[*]?(@ == "+ sublistValue + ")'")).in(Boolean.TRUE)));

例外情况:
Org.hibernate.QueryException:意外字符:‘@’
有什么建议吗?

toiithl6

toiithl61#

我不知道你的模型是什么样子,但你应该使用下面这样的东西:

predicates.add(
    cb.equal(
        cb.function(
            "JSON_EXISTS", 
            Boolean.class, 
            root.get("jsonAttribute"),
            cb.literal("$.[*]?(@ == "+ sublistValue + ")")
        ),
        cb.literal(true)
    )
);

相关问题