我想使用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
答案 0 :(得分:0)
最后,我发现“函数”方法可以完成我想要的
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
}