Как получить данные из базы данных, игнорируя / заменяя / обрезая между пробелами значения столбца в CriteriaBuilder - PullRequest
0 голосов
/ 07 апреля 2020

Я узнал, как я могу обрезать конечные и начальные пробелы из строки, но не смог найти, как извлечь данные путем замены промежуточных пробелов.

У меня есть столбец 1 в таблице X. В столбце 1 у меня есть два значения: "abcd" и "ab cd". Я хочу получить оба значения, передав "abcd" в качестве параметров поиска в criteriaBuilder.

У меня ниже для конечного и начального пробела, может кто-нибудь, пожалуйста, дайте мне знать, как я могу заменить все пробелы в criteriaBuilder?

criteriaBuilder.equal(criteriaBuilder.trim(criteriaBuilder.upper(Column 1);

Мне не удалось заставить его работать именно так, как я хотел, я попытался добавить изменения, перестроить и перезапустить.

1 Ответ

0 голосов
/ 07 апреля 2020

Проблема заключалась в том, как я объяснил в вопросе, что у меня есть таблица X. В этой таблице у меня есть столбец 1. В столбце 1 у меня есть два значения: "abcd" и "ab cd". Я хочу получить оба значения, передав "abcd" в качестве параметров поиска в criteriaBuilder.

У меня был следующий код для начального и конечного пробелов, но он не работал для "ab cd" с белым пробел не на краю строки.

В основном я хотел сравнить строки между значением столбца ввода и базы данных (заменено пробелом):

criteriaBuilder.equal(criteriaBuilder.trim(criteriaBuilder.upper(Column 1);

Я заменил это на

 Predicate postCodePredicate =  criteriaBuilder.like(criteriaBuilder.upper(criteriaBuilder.function("REPLACE",                                                                           String.class,                                                                          criteriaBuilder.upper(addJoin.get("Code")) ,                                                                          criteriaBuilder.literal(" ") ,                                                                           criteriaBuilder.literal(""))) ,                                                                          "%" + pCode(filter.getCode()).toUpperCase().replace(" ",   "") + "%" ); 

, как предложено в критериях jpa, сравнивает две строки без учета пробелов

В основном используется функция criteriaBuilder с "REPLACE"

criteriaBuilder.function("REPLACE",        
                        String.class,  
                        criteriaBuilder.upper(addJoin.get("Code")) ,  
                        //Expression above
                        criteriaBuilder.literal(" ") , 
                        criteriaBuilder.literal(""))) , 
                        "%" + pCode(filter.getCode()).toUpperCase().replace(" 
                        ",   "") + "%" )         //pCode(filter.getCode() is //your input search param

Я вызываю функцию со следующими параметрами

public <T> Expression<T> function(String name, Class<T> returnType, Expression... arguments) {
    return new ParameterizedFunctionExpression(this, returnType, name, arguments);
}

Вы также можете использовать criteriaBuilder.equal, как показано ниже, если вы не хотите criteriaBuilder.like, просто удалите "%"

Predicate postCodePredicate =  criteriaBuilder.like(criteriaBuilder.upper(criteriaBuilder.function("REPLACE",                                                                            String.class,                                                                           criteriaBuilder.upper(addJoin.get("Code")) ,                                                                            criteriaBuilder.literal(" ") ,                                                                           criteriaBuilder.literal(""))) ,                                                                             pCode(filter.getCode()).toUpperCase().replace(" ",   "") ); 
...