2009-05-20 28 views
2

我有一個由國家組成的數據庫表。然而爲什麼Spring的HibernateTemplate的loadAll()方法會爲每一行生成更新?

Hibernate: update countries set name=?, iso_alpha_2=?, iso_alpha_3=? where id=? 
Hibernate: update countries set name=?, iso_alpha_2=?, iso_alpha_3=? where id=? 
Hibernate: update countries set name=?, iso_alpha_2=?, iso_alpha_3=? where id=? 
... 
once for each row 

方法的工作原理,:在我的DAO延伸的HibernateDaoSupport以下方法...

public List<Country> getCountries() { 
    return getHibernateTemplate().loadAll(Country.class); 
} 

...生成以下活動。我列出了我的國家列表,但所有更新都有哪些內容?

我這個類映射並不十分奇特:

<class name="Country" table="countries"> 
    <id name="id" column="id"> 
     <generator class="identity"/> 
    </id> 
    <property name="name" column="name"/> 
    <property name="alpha2" column="iso_alpha_2" /> 
    <property name="alpha3" column="iso_alpha_3" /> 
</class> 

任何人都可以點我在正確的方向?爲什麼loadAll會觸發更新?

回答

3

Hibernate顯然認爲它從數據庫加載的值已經改變,所以它會刷新更新。

您可以在類映射中設置'mutable =「false」',這應該會停止更新,但這並不理想。

嘗試在類映射上設置'dynamic-update ='true'',並且至少會顯示Hibernate認爲需要更新的列。國家表格中的值實際上是否有任何改變?我想如果你在org.hibernate.type包上設置了調試日誌,你還會得到調試輸出,顯示哪些值被綁定到更新語句。

如果模型對象試圖聰明 - 例如,修剪空白,更改數據庫不保留的值。

+0

感謝您的動態更新提示。它看起來像引起問題的屬性是字符數組。現在我必須做一些挖掘並弄清楚如何映射特定大小的字符數組......我應該只使用字符串嗎? – Boden 2009-05-20 19:08:59

相關問題