1
我與默認值和計算的字段的實體如下:JPA實體默認值
public class Target{
@Transient
public Long total;
@Min(0)
@Column(columnDefinition="default 0")
public Long val1 = 0L;
@Min(0)
@Column(columnDefinition="default 0")
public Long val2 = 0L;
public Target() {
this.total = Long.valueOf(0L);
this.val1 = Long.valueOf(0L);
this.val2 = Long.valueOf(0L);
}
public Long calcTotal() {
return val1 + val2 ;
}
public void setVal1(Long val) {
this.val1 = checkNotNull(val);
total = calcTotal();
}
public void setVal2(Long val) {
this.val2 = checkNotNull(val);
total = calcTotal();
}
}
然而每當實體由JPA加載,設置器被稱爲和一個NullPointerException在計算值拋出。 在JPA調用setter之前是否有默認值?
我編輯的代碼與失蹤總場。我相信play framework增強了JPA,並且增加了getter/setter(如果不存在的話)。這些字段需要公開。這個想法是隻計算一次數值更新時的總數,而不是每次需要總數。 – emt14
除非Play完全改變實體的代碼,否則我的觀點仍然存在:不應該首先訪問setters。而且你已經完成了映射的方式,它仍然存在於數據庫中,這根本不是必需的。與從數據庫中加載實體的成本相比,加法的成本是可笑且可以忽略的。在每次訪問時計算它並不會產生任何顯着差異。 –
關於總體持久性的好處,我會讓它變成一時的。然而,這是一個簡單的例子,在我的特殊情況下,這是有道理的。 – emt14