我正在開發管理狗旅館業務的 spring 應用程序。在應用程序中,我有兩個實體類 - Cage 和 Dog(其中一個狗屬性是 Cage)。狗和籠子的數據存儲在 MySQL 數據庫中。在應用程序中,首先我們創建一個 Dog 對象初始化屬性,如:姓名、年齡、種族、性別、主人姓名、主人編號。在 dogRepository 類中使用實體管理器 persist 方法后,數據庫中會出現一條新記錄:@Override@Transactionalpublic void createDog(String name, String race, int age, String sex, String ownerFullName, int ownerPhoneNumber) { Dog newDog = new Dog(name, race, age, sex, ownerFullName, ownerPhoneNumber); em.persist(newDog);}數據庫截圖除了我們在創建狗期間輸入的屬性外,我們可以為其分配籠子并初始化其他屬性:int durationOfStayInDays、LocalDate startOfStayDate、LocalDate endOfStayDate、int ownerCharge。問題是:當狗分配了籠子時,我可以使用實體管理器將其刪除,但是當它沒有分配籠子時,我在嘗試刪除它時收到 NullPointerException。以前我在沒有使用數據庫的情況下運行應用程序(記錄存儲在程序內的地圖中)并且一切正常。在我的代碼中有 clases:Dog (Entity) --> DogRepository --> DogService --> DogController。以下是 DogRepository 和 Dog 類的代碼片段:狗類:@Transactionalpublic void setCage(Cage cage) { if(cage.isFree()) { this.cage = cage; this.startOfStayDate = LocalDate.now(); this.endOfStayDate = this.startOfStayDate.plusDays(this.durationOfStayInDays); cage.setFree(false); cage.setOccupied(true); }}public void setNullCage() { this.cage.setOccupied(false); this.cage.setFree(true); this.cage = null; this.startOfStayDate = null; this.endOfStayDate = null;}狗倉庫:@Override@Transactionalpublic void removeDog(Integer id) { Dog dog = getDogById(id); if (dog.getCage().isOccupied()) { dog.setNullCage(); } em.remove(dog);}狗服務: public void removeDog(Integer id) { dogRepository.removeDog(id);}
嘗試使用 spring 應用程序中的實體管理器從數據庫中刪除記錄后出現 NullPointer 異常
慕工程0101907
2023-03-23 15:36:49