第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

嘗試使用 spring 應(yīng)用程序中的實(shí)體管理器從數(shù)據(jù)庫(kù)中刪除記錄后出現(xiàn) NullPointer 異常

嘗試使用 spring 應(yīng)用程序中的實(shí)體管理器從數(shù)據(jù)庫(kù)中刪除記錄后出現(xiàn) NullPointer 異常

慕工程0101907 2023-03-23 15:36:49
我正在開發(fā)管理狗旅館業(yè)務(wù)的 spring 應(yīng)用程序。在應(yīng)用程序中,我有兩個(gè)實(shí)體類 - Cage 和 Dog(其中一個(gè)狗屬性是 Cage)。狗和籠子的數(shù)據(jù)存儲(chǔ)在 MySQL 數(shù)據(jù)庫(kù)中。在應(yīng)用程序中,首先我們創(chuàng)建一個(gè) Dog 對(duì)象初始化屬性,如:姓名、年齡、種族、性別、主人姓名、主人編號(hào)。在 dogRepository 類中使用實(shí)體管理器 persist 方法后,數(shù)據(jù)庫(kù)中會(huì)出現(xiàn)一條新記錄:@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);}數(shù)據(jù)庫(kù)截圖除了我們?cè)趧?chuàng)建狗期間輸入的屬性外,我們可以為其分配籠子并初始化其他屬性:int durationOfStayInDays、LocalDate startOfStayDate、LocalDate endOfStayDate、int ownerCharge。問題是:當(dāng)狗分配了籠子時(shí),我可以使用實(shí)體管理器將其刪除,但是當(dāng)它沒有分配籠子時(shí),我在嘗試刪除它時(shí)收到 NullPointerException。以前我在沒有使用數(shù)據(jù)庫(kù)的情況下運(yùn)行應(yīng)用程序(記錄存儲(chǔ)在程序內(nèi)的地圖中)并且一切正常。在我的代碼中有 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;}狗倉(cāng)庫(kù):@Override@Transactionalpublic void removeDog(Integer id) {    Dog dog = getDogById(id);    if (dog.getCage().isOccupied()) {        dog.setNullCage();    }        em.remove(dog);}狗服務(wù): public void removeDog(Integer id) {    dogRepository.removeDog(id);}
查看完整描述

3 回答

?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊

發(fā)生這種情況是因?yàn)樵跈z查籠子是否被占用之前,您沒有檢查籠子是否為空。我認(rèn)為,代碼應(yīng)該是這樣的:

if (dog.getCage != null && dog.getCage().isOccupied()) {
    dog.setNullCage();
}

另外,您的方法 setNullCage() 也有同樣的缺陷。


查看完整回答
反對(duì) 回復(fù) 2023-03-23
?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

1)Cage如果aDog上沒有

if (dog.getCage().isOccupied()) {

自然會(huì)失敗..你需要添加dog.getCage() != null &&

2)我不會(huì)把操縱的邏輯Entity1放在Entity2. 它們是兩個(gè)獨(dú)立的域。就個(gè)人而言,我會(huì)為此使用一些外部類。

3)您不需要在刪除它的地方明確地將其設(shè)置Cage為空。Dog除非您已經(jīng)cascade.REMOVE配置并且您想明確避免這種情況。


查看完整回答
反對(duì) 回復(fù) 2023-03-23
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

我認(rèn)為您的代碼做得太過火了。替換下面的

if (dog.getCage().isOccupied()) {
    dog.setNullCage();
}

dog.setNullCage();

并更改setNullCage

public void setNullCage() { 
    this.cage = null;
}

一個(gè)更好的名字setNullCage可能是clearCageremoveCage


查看完整回答
反對(duì) 回復(fù) 2023-03-23
  • 3 回答
  • 0 關(guān)注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)