สปริงด้วย Querydsl: ข้อยกเว้นตัวชี้ Null

ฉันกำลังพยายามใช้ฟังก์ชันตัวกรองการค้นหาและโหลดตารางในแอปพลิเคชัน 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();   

}

ใครช่วยบอกฉันหน่อยได้ไหมว่าทำไมฉันถึงได้รับข้อยกเว้นตัวชี้ null แทนที่จะเป็นข้อมูลทั้งหมด


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
มันทำงานได้อย่างถูกต้อง ขอบคุณ. อีกประการหนึ่งคือฉันต้องการคอลัมน์เฉพาะจาก Query Result แล้วฉันจะวนซ้ำ List‹Tuple› ได้อย่างไร - person SpringUser; 31.08.2018
comment
ฉันพยายามโดยใช้สำหรับแต่ละลูป แต่ได้รับข้อยกเว้นการส่งคลาส ` List‹Tuple› queryResult = query.fetch(); สำหรับ (แถว Tuple : queryResult) { System.out.println (Build Id +row.get(room.nBuildId)); } - person SpringUser; 31.08.2018
comment
ตั้งคำถามแยกต่างหากเนื่องจากไม่เกี่ยวข้องกับ NullPointerException - person Robert Bain; 31.08.2018