Коллекция гибернации не обновляется при вставке записей извне

#hibernate

#гибернация

Вопрос:

У меня есть отображенная коллекция, которая не обновляется, когда я добавляю элементы в эту коллекцию извне, в другом приложении.

Кэширование второго уровня отключено.

Пример…

 session = HibernateDataSource.openSession();
User dao = (User) session.load(User.class, 2434152);
// No items now, this gives 0
System.err.println(dao.getItems().size());
session.close();
Thread.sleep(10000);
// Add an item outside, e.g. in PMA
session = HibernateDataSource.openSession();
HibernateDataSource.getSessionFactory().evict(User.class);
HibernateDataSource.getSessionFactory().evict(UserItem.class);
HibernateDataSource.getSessionFactory().evictCollection(User.class.getName()   ".items");
dao = (User) session.load(User.class, 2434152);
// Still zero
System.err.println(dao.getItems().size());
session.close();
  

Я попробовал несколько решений при поиске в Google, например, установив коллекцию как «грязную». Ничего не сработало.

Есть ли что-то еще, на что я не посмотрел?

P.S. Сначала попробовал Hibernate 3.2.7. Обновлен до 3.3.2, никакой разницы.

Ответ №1:

Потратив 95% времени на взлом Hibernate, она была освобождена.

Проблема возникла из-за кэширования запросов MySQL, которое, несмотря на название, также кэширует наборы результатов для повторяемых операций чтения. Это связано с характером управления несколькими версиями в InnoDB MySQL.

Чтобы «установить новый момент времени для моментального снимка», оберните свою единицу работы в транзакцию, даже если есть только запросы select.

Дальнейшее чтение…

http://forums.mysql.com/read.php?39,416790,416790

http://dev.mysql.com/doc/refman/5.0/en/query-cache.html