代码之家  ›  专栏  ›  技术社区  ›  Boden

为什么Spring的HibernateTemplate的loadAll()方法会为每一行生成更新?

  •  2
  • Boden  · 技术社区  · 17 年前

    我有一个由国家组成的数据库表。在扩展HibernateDao的我的DAO中,支持以下方法。。。

    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会触发更新?

    1 回复  |  直到 17 年前
        1
  •  3
  •   araqnid    17 年前

    Hibernate显然认为它从DB加载的值已经更改,所以它正在刷新更新。

    尝试在类映射上设置“dynamic update=“true”,这将至少显示Hibernate认为需要更新的列。国家/地区表中的值是否以任何方式进行了更改?我认为,如果您在org.hibernate.type包上设置调试日志记录,您还将获得调试输出,显示为update语句绑定的值。