我想在 JSONB 列的基础级别进行搜索,如何使用 Hibernate 实现这一点?此列是一个列表
class A{
@Type(type = "jsonb")
@Column(name = "myItems", nullable = false, columnDefinition = "jsonb")
private List<Item> items;
}
class Item{
private String fieldA;
private int fieldB;
}
为了在另一个 json 对象中搜索一个 json 对象的出现,postgresql 具有适用于任何 json 类型的@>运算符,它对应于 jsonb_contains(jsonb, jsonb) 函数,但不幸的是它将 jsonb 类型作为参数。hibernate 传递一个类型字符变化的参数(也许有一些方法可以转换或指定类型)。为了解决这个细微差别,我使用了我自己的函数 jsonb_contains(jsonb, text),它是一个带有 ghost 类型的标准包装器,在代码中我使用了以下表达式:
jsonb_contains(jsonb, text) 函数代码:
用于查找条目的 sql 查询示例: