【发布时间】:2022-08-12 13:33:31
【问题描述】:
我想创建读取和比较电子邮件的谓词,因此我可以使用 Java 中的 Criteria API 过滤掉结果。
为此,我使用了下面的代码但没有用。 错误:原因:org.postgresql.util.PSQLException:错误:在 WHERE 中不允许设置返回函数
Expression<String[]> expressions = criteriaBuilder.function(\"jsonb_array_elements\",
String[].class, entity.<String>get(column_name)
);
Expression<?>[] expressions1 = {expressions, criteriaBuilder.literal(\"characteristic\"), criteriaBuilder.literal(\"email\")};
toPredicate(entity, searchText.toLowerCase(), expressions1);
public Predicate toPredicate(Root<TeamMember> root, String value, Expression<?>[] args) {
Expression<String> function = criteriaBuilder.function(\"jsonb_extract_path_text\",
String.class, args
);
return criteriaBuilder.like(
function,
\"%\" + value + \"%\"
);
}
我的 JSON 对象如下所示:
[
{
\"id\": \"1234\",
\"validFor\": {
\"endDateTime\": null,
\"startDateTime\": \"2018-08-12T06:54:31.610218300Z\"
},
\"preferred\": true,
\"characteristic\": {
\"email\": \"abcd@gmail.com\"
}
},
{
\"id\": \"5678\",
\"validFor\": {
\"endDateTime\": null,
\"startDateTime\": \"2019-09-15T06:54:31.610218300Z\"
},
\"preferred\": true,
\"characteristic\": {
\"email\": \"xyz@gmail.com\"
}
}
]
标签: java postgresql spring-data-jpa criteria hibernate-criteria