我有一个由国家组成的数据库表。在我的DAO中扩展了HibernateDAOSupport以下方法......
public List<Country> getCountries() {
return getHibernateTemplate().loadAll(Country.class);
}
...生成以下活动:
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
然而,该方法有效。我得到了我的国家列表,但所有更新都是什么?
我对这个班级的映射并不是非常奇特:
<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会触发更新?
答案 0 :(得分:3)
Hibernate显然认为它从数据库加载的值已经改变,所以它正在刷新更新。
您可以在类映射中设置'mutable =“false”',这应该会停止更新,但这并不理想。
尝试在类映射上设置'dynamic-update =“true”',这至少会显示Hibernate认为需要更新的列。国家/地区表中的值是否实际上以任何方式更改?我想如果你在org.hibernate.type包上设置调试日志记录,你也会得到调试输出,显示更新语句绑定的值。
如果模型对象试图变得聪明,就会发生这种效果 - 例如修剪空格,更改数据库不保留的值。