/** * {@inheritDoc} */ @Override public <T> BooleanExpression createStringExpression( PathBuilder<T> entityPath, String fieldName, String searchStr) { if (StringUtils.isEmpty(searchStr)) { return null; } BooleanExpression expression = entityPath.getString(fieldName).lower() .eq(searchStr.toLowerCase()); return expression; }
/** * Return equal expression for {@code entityPath.fieldName}. * <p/> * Expr: {@code entityPath.fieldName eq 'searchStr'} * <p/> * Equal operation is case insensitive. * * @param entityPath Full path to entity and associations. For example: * {@code Pet} , {@code Pet.owner} * @param fieldName Property name in the given entity path. For example: * {@code name} in {@code Pet} entity, {@code firstName} in * {@code Pet.owner} entity. * @param searchStr the value to find, may be null * @return BooleanExpression */ public static <T> BooleanExpression createStringExpression( PathBuilder<T> entityPath, String fieldName, String searchStr) { if (StringUtils.isEmpty(searchStr)) { return null; } BooleanExpression expression = entityPath.getString(fieldName).lower() .eq(searchStr.toLowerCase()); return expression; }
.eq(value.toLowerCase());
.eq(value.toLowerCase());
@Test public void Simple_StringOperation() { Predicate predicate = cat.kittens.any().name.substring(1).eq("uth123"); assertMatches("exists \\(select 1\n"+ "from cat.kittens as cat_kittens.*\n" + "where substring\\(cat_kittens.*\\.name,2\\) = \\?1\\)", serialize(predicate)); }
@Test @ExcludeIn(DERBY) public void Substring_From_Right() { query().from(cat) .where(cat.name.substring(-1, 1).eq(cat.name.substring(-2, 1))) .list(cat); }
@Test @ExcludeIn({HSQLDB, DERBY}) public void Substring_From_Right2() { query().from(cat) .where(cat.name.substring(cat.name.length().subtract(1), cat.name.length()) .eq(cat.name.substring(cat.name.length().subtract(2), cat.name.length().subtract(1)))) .list(cat); }