Spring с Querydsl: исключение нулевого указателя

Я пытаюсь реализовать функциональность фильтра поиска и загрузить сетку в приложении spring boot data JPA. Для создания динамического запроса я использую Querydsl.

Я ищу данные по sFloor и nBuildId.

  1. Если я передаю sFloor, nBuildId, только эта совпадающая запись должна отображаться в сетке

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

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

Комнатный контроллер

@GetMapping("/getUnclaimedRoomDetails")
public List<Tuple> populateUnclaimedRoomGridView(@RequestParam(value="nBuildId", required=false) Integer nBuildId,
                                                 @RequestParam(value="sFloor", required=false) String sFloor) {
    return roomService.loadUnclamiedRoomGrid(nBuildId,sFloor);

}

Обслуживание номеров

public  List<Tuple> loadUnclamiedRoomGrid(Integer nBuildId, String sFloor) {

    QRoom room = QRoom.room;        
    QRoomDepartmentMapping roomDepartmentMapping = QRoomDepartmentMapping.roomDepartmentMapping;

    JPAQuery<Tuple> query = new JPAQuery<Tuple>(em);

    query.from(room) 
         .where(room.nRoomId.notIn
                     (JPAExpressions.select(roomDepartmentMapping.nRoomId)
                           .from(roomDepartmentMapping)
                     )
           );

    if (nBuildId != 0) {
        query.where(room.nBuildId.eq(nBuildId));
    }

    if(sFloor != null) {
        query.where(room.sFloor.eq(sFloor));
    }       

return query.fetch();   

}

Может ли кто-нибудь сказать мне, почему я получаю исключение нулевого указателя вместо всех данных?


person SpringUser    schedule 31.08.2018    source источник
comment
В какой строке вы получаете исключение?   -  person Jens Schauder    schedule 31.08.2018


Ответы (1)


Я думаю, что проблема в if (nBuildId != 0). nBuildId — это большой Integer, поэтому при выполнении проверки он распаковывается в примитив int. Если он равен нулю, это вызовет ошибку NullPointerException. Нулевая проверка на nBuildId должна все исправить, например. if (nBuildId != null && nBuildId != 0).

person Robert Bain    schedule 31.08.2018
comment
он работает правильно Спасибо. еще одна вещь: мне нужен конкретный столбец из результата запроса. Итак, как я могу повторить этот список‹Tuple› - person SpringUser; 31.08.2018
comment
Я попытался использовать для каждого цикла, но получил исключение приведения класса `List‹Tuple› queryResult = query.fetch(); for (строка кортежа: queryResult) { System.out.println (идентификатор сборки + row.get (room.nBuildId)); } - person SpringUser; 31.08.2018
comment
Поднимите отдельный вопрос, так как это не связано с NullPointerException. - person Robert Bain; 31.08.2018