gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:07:34 31 4
gpt4 key购买 nike

我有一个由国家组成的数据库表。在我扩展 HibernateDAOSupport 的 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 会触发更新?

最佳答案

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

您可以在类映射中设置 'mutable="false"',这应该会停止更新,但这并不理想。

尝试在类映射上设置 'dynamic-update="true"',这至少会显示 Hibernate 认为需要更新的列。国家表中的值实际上是否以任何方式更改?我认为,如果您在 org.hibernate.type 包上设置调试日志记录,您还将获得调试输出,显示更新语句绑定(bind)的值。

如果模型对象试图变得聪明,就会出现这种效果——例如修剪空白,更改数据库不保留的值。

关于hibernate - 为什么 Spring HibernateTemplate loadAll() 方法会为每一行生成更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888921/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com