我有一个带有逗号分隔的字符串值的数据库表列,如下所示:
id mycolumn
-- --------
1 A
2 A, B
3 A, B, C
我无法更改它,因为它是一个旧的定制器数据库。
我想检查mycolumn
一个字符串列表:
对列表['A'] 的第一个查询应返回记录1
针对列表['A','B'] 的第二个查询应返回记录1,2
针对列表['A','B','C'] 的第三个查询应返回记录1,2,3
我需要一个 sql (postgres) 语句和一个带有javax.persistence.criteria.CriteriaBuilder
and的 java 实现javax.persistence.criteria.Predicate
。
非常感谢你的提示,安
编辑: 这是我对 javax.persitence 部分的解决方案:
public static void arrayContains(final CriteriaBuilder cb, final List<Predicate> where,
final Expression<String> expression, final String values) {
Expression<String> expressionValues = cb.function("string_to_array", String.class, cb.literal(values), cb.literal(", "));
Expression<String> expressionDb = cb.function("string_to_array", String.class, expression, cb.literal(", "));
where.add(cb.isTrue(cb.function("arraycontains", Boolean.class, expressionValues, expressionDb)));
}