Динамическое создание предложения WHERE на основе фильтра в queryDSL.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Динамическое создание предложения WHERE на основе фильтра в queryDSL.

Сообщение Anonymous »

У меня есть запрос, для которого требуются динамические предложения SQL WHERE на основе фильтров.
Проблема
Это может привести к ошибке NullPointerException (NPE), если я добавляю «И», хотя предыдущий фильтр не существует.
Код

Код: Выделить всё

public List getMyQuery(FiltersDTO filters) {

JPAQuery myEntity = getJPAQueryFactory().selectFrom(myEntity).limit(20);
BooleanExpression whereClause = null;

boolean whereClauseAdded = false;
boolean ifNoFilter = Stream.of(myEntity).allMatch(Objects::isNull);

if (ifNoFilter) {
return new ArrayList(myEntity.fetchAll().fetch());
}

if (filters.getId() != null) {
whereClause = myEntity.id.eq(filters.getId());
whereClauseAdded = true;
}

if (filters.getName() != null) {
if (whereClauseAdded) {
whereClause = whereClause.and(myEntity.id.eq(filters.getName()));
} else {
whereClause = myEntity.id.eq(filters.getName());
whereClauseAdded = true;
}
}

// remaining code
}
Вопрос
Есть ли лучший способ добавить фильтры, не рискуя получить NPE?

Подробнее здесь: https://stackoverflow.com/questions/748 ... n-querydsl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»