Pegas dengan Querydsl : Pengecualian Null Pointer

Saya mencoba menerapkan fungsionalitas filter Pencarian dan memuat jaringan di aplikasi spring boot data JPA. Untuk membuat kueri dinamis saya menggunakan Querydsl.

Saya mencari data menurut sFloor dan nBuildId.

  1. Jika saya meneruskan sFloor, hanya nBuildId catatan yang cocok itu yang akan ditampilkan di kisi

  2. Jika saya tidak memberikan nilai apa pun maka grid harus memuat semua nilai.

Saya mencoba seperti di bawah ini. Ketika saya meneruskan data, saya dapat memfilter data. Tetapi ketika saya tidak melewati rekor apa pun, saya mendapatkan null pointer exception.

Pengontrol Ruangan

@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);

}

Layanan Kamar

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();   

}

Adakah yang bisa memberi tahu saya mengapa saya mendapatkan pengecualian penunjuk nol alih-alih semua data?


person SpringUser    schedule 31.08.2018    source sumber
comment
Di baris manakah Anda mendapatkan pengecualian?   -  person Jens Schauder    schedule 31.08.2018


Jawaban (1)


Saya pikir masalahnya adalah if (nBuildId != 0). nBuildId adalah Integer yang besar sehingga ketika pemeriksaan dilakukan, pemeriksaan tersebut akan dibuka ke int primitif. Jika nol, ini akan menyebabkan NullPointerException. Pemeriksaan nol pada nBuildId seharusnya memperbaiki keadaan, E.G. if (nBuildId != null && nBuildId != 0).

person Robert Bain    schedule 31.08.2018
comment
ini berfungsi dengan baik. Terima kasih. satu hal lagi adalah saya ingin kolom tertentu dari Hasil Kueri. jadi Bagaimana saya bisa mengulangi Daftar ini‹Tuple› - person SpringUser; 31.08.2018
comment
Saya mencoba menggunakan setiap loop tetapi mendapatkan pengecualian pemeran kelas ` List‹Tuple› queryResult = query.fetch(); for(Tupel baris : queryResult) { System.out.println(Build Id +row.get(room.nBuildId)); } - person SpringUser; 31.08.2018
comment
Ajukan pertanyaan terpisah karena ini tidak ada hubungannya dengan NullPointerException. - person Robert Bain; 31.08.2018