在項目中遇到利用hibernate執行查詢後立馬又對數據庫數據進行了更新,導致了錯誤。
public String getName()
{
if(this.name==null)
{
this.name="";
}
return this.name;
}
因為在數據庫中是null,在hibernate查詢時會設置成“”。hibernate會任務session中的實體發生了改變,就會執行update。
解決方式:
采用的解決辦法是將配置文件增加一個屬性access="field" 這樣就不會通過get方法比較屬性而直接訪問屬性字段
<property name="name" type="java.lang.String" access="field">
<column name="name" length="20" />
</property>
default-access="field ¦property ¦ClassName"
這裡field表示Hibernate直接讀取類中的字段值。
這種方式如果你在業務中不需要getter和setter的話,就可以不用寫了。 這時,可以設置屬性為不可變,可以不用執行髒檢查。
property(默認)表示Hibernate通過getter和setter讀取。
這種方式可以在getter和setter中做額外的處理。
ClassName,是指使用實現了org.hibernate.property.PropertyAccessor接口的類的具體策略來訪問字段屬性。