public static <T> Predicate contains(Root<T> root, CriteriaBuilder cb, String propertyName, String item) {
Assert.doesNotContain(item, ",", "'item' should not contains comma");
Dialect dialect = getDialect(cb);
if (dialect instanceof MySQLDialect) {
return cb.greaterThan(cb.function("find_in_set", Integer.class, cb.literal(item), root.get(propertyName)),
0);
}
if (dialect instanceof PostgreSQLDialect) {
return cb.equal(cb.literal(item), cb.function("any", String.class,
cb.function("string_to_array", String[].class, root.get(propertyName), cb.literal(","))));
}
return cb.like(cb.concat(cb.concat(",", root.get(propertyName)), ","), '%' + item + '%');
}