Почему метод loadAll () Spring HibernateTemplate генерирует обновления для каждой строки? - PullRequest
2 голосов
/ 20 мая 2009

У меня есть таблица базы данных, состоящая из стран. В моем DAO, который расширяет HibernateDAOS, поддерживается следующий метод ...

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 Ответ

3 голосов
/ 20 мая 2009

Hibernate, по-видимому, считает, что значения, загруженные из БД, изменились, поэтому он обновляет обновления.

Вы можете просто установить 'mutable = "false" в отображении класса, что должно остановить обновления, но это не идеально.

Попробуйте установить 'dynamic-update = "true"' в отображении класса, и это по крайней мере покажет, какой столбец, по мнению Hibernate, нуждается в обновлении. Значения в таблице стран действительно изменяются каким-либо образом? Я думаю, что если вы установите отладочную регистрацию в пакете org.hibernate.type, вы также получите выходные данные отладки, показывающие, какие значения связаны для операторов обновления.

Эффект такого рода может возникнуть, если объект модели пытается быть умным, например обрезка пробелов, внесение изменений в значение, которое база данных не сохраняет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...