歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Hibernate執行查詢後又立馬執行了更新(default-access)

在項目中遇到利用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接口的類的具體策略來訪問字段屬性。

Copyright © Linux教程網 All Rights Reserved