在一項服務中,我想為 BudgetGeschaeftfeld 設定 betrag。設定 Betrag 后,需要呼叫 budgetPlan 的 Fetch.Eager 方法來更新自己的 Betrag。但是我得到一個 NullPointerException
java.lang.NullPointerException:無法呼叫“com.bm.ent.budgetplan.BudgetPlan.berechnePrognose()”,因為“this.budgetPlan”為空
為什么會這樣?我能做些什么來解決它?
我的班級代碼:
@Entity(name= "Budgetgeschaftsfeld")
@Getter
@Setter
@NoArgsConstructor
public class BudgetGeschaeftsfeld extends Budget{
@JsonIgnore
@OneToMany(
mappedBy="budgetGeschaftfeld",
cascade=CascadeType.ALL,
orphanRemoval=true,
targetEntity = BudgetMarke.class
)
private List<BudgetMarke> childBudgets= new ArrayList<>();
@JsonIgnore
@ManyToMany
@ToString.Exclude
private List<User> users= new ArrayList<>();
@JsonIgnore
@ManyToOne( fetch=FetchType.EAGER,
cascade=CascadeType.PERSIST)
@JoinColumn(name="pid")
@ToString.Exclude
private BudgetPlan budgetPlan;
public BudgetGeschaeftsfeld(String name, BudgetTyp typ, Double betrag, String kommentar) {
super(name, typ, betrag, kommentar);
}
public void setBetrag(Double betrag) {
if (this.getBudgetTyp()==BudgetTyp.DYNAMISCH) {
super.setBetrag(this.betragChildBudgets());
}else {
super.setBetrag(betrag);
}
budgetPlan.berechnePrognose();
}
uj5u.com熱心網友回復:
我認為這是因為您命名了一個類,但沒有在該類的記憶體中設定一個實體,因為在您的代碼中具有 this 與= null:
private BudgetPlan budgetPlan;
因此,當您的代碼執行時,budgetPlan.berechnePrognose();它無法在記憶體中分配任何內容。
嘗試:
@JsonIgnore
@ManyToOne( fetch=FetchType.EAGER,
cascade=CascadeType.PERSIST)
@JoinColumn(name="pid")
@ToString.Exclude
private BudgetPlan budgetPlan = new BudgetPlant();
免責宣告:我對那里的所有注釋都沒有經驗,所以也許我錯過了整個代碼的邏輯,但只需確保BudgetPlan budgetPlan != null.
uj5u.com熱心網友回復:
答案是
@JsonIgnore
@ManyToOne( fetch=FetchType.Lazy,
cascade=CascadeType.PERSIST)
@JoinColumn(name="pid")
@ToString.Exclude
private BudgetPlan budgetPlan;
然后在呼叫方法之前獲取預算計劃
public void setBetrag(Double betrag) {
if (this.getBudgetTyp()==BudgetTyp.DYNAMISCH) {
super.setBetrag(this.betragChildBudgets());
}else {
super.setBetrag(betrag);
}
detBudgetPlan().berechnePrognose();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480424.html
