Почему Hibernate обновляет UpdateTimestampsCache с каждым запросом SQL - PullRequest
1 голос
/ 12 декабря 2011

Я включил второй уровень и кэши запросов в своем приложении. Похоже, когда я вызываю следующий код

String sql = "update SOME_TABLE set SOME_FIELD=somevalue";
SQLQuery query = getSession().createSQLQuery(sql);
query.executeUpdate();

hibernate обновляет UpdateTimestampsCache для ВСЕХ таблиц.Зачем он это делает?У меня есть около 1000 таблиц и много запросов SQL в моем приложении.Мне не нужны эти обновления, потому что я не обновляю кэшированные таблицы через sql.Это вызывает огромный сетевой трафик и медлительность приложения.

Есть ли способ сообщить hibernate НЕ делать никаких обновлений при выполнении SQL-запросов?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2012

Я нашел решение!

Вы можете использовать метод addSynchronizedEntityClass ()

String sql = "update SOME_TABLE set SOME_FIELD=somevalue";
SQLQuery query = getSession().createSQLQuery(sql);
query.addSynchronizedEntityClass(SomeTable.class)
query.executeUpdate();

В этом случае будет сброшен только кеш для SOME_TABLE

0 голосов
/ 12 декабря 2011

Вы можете попробовать использовать StatelessSession вместо обычного сеанса. Вы также можете использовать прямой JDBC вместо метода createSQLQuery в hibernate.

Другой вариант - использовать запрос на обновление HQL вместо SQL. Это может быть в состоянии выяснить, какую сущность вы обновляете, и только аннулировать результаты запроса для этого запроса. Когда вы запускаете SQL-запрос, Hibernate не знает, какая таблица обновляется, поэтому для большей безопасности он пометит все результаты кэша запросов как недействительные.

...