Spring hibernatetemplate: удалить кеши? - PullRequest
1 голос
/ 17 февраля 2010

Я пишу тест, чтобы проверить, работает ли мой getHibernateTemplate().delete(x).Теперь я обнаружил, что в одном тесте, кажется, есть некоторое кеширование (мой тестовый класс расширяет, расширяет AbstractTransactionalDataSourceSpringContextTests).

Я имею в виду следующее.Моя функция удаления:

существует ли она?
yes: удалить ее и вернуть true
no: вернуть false.

Теперь я пытаюсь сделать два утверждения в моей тестовой функции.
первый - assertTrue, чтобы проверить, действительно ли он удален
второй - assertFalse, чтобы убедиться, что он правильно возвращает false.

Однако мой второй тест не пройден, и когда я отлаживаю его, он действительно переходит к истинному разделу.

Однако, если я добавлю следующую строку getHibernateTemplate().find("from classX"); в качестве первой строки в функции удаленияэто работает как задумано.Хотя я ничего не делаю со значением.Так что проблема с кэшированием кажется наиболее логичной.

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

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

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

getSharedEntityManager().flush(); //it's something like this
getSharedEntityManager().clear(); 

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

0 голосов
/ 17 февраля 2010

Просто подумайте, вы можете упасть из-за того, что все вызовы getHibernateTemplate (). Dosomething () происходят в одной транзакции. У меня были проблемы раньше, когда тесты, которые в производстве приводили к двум транзакциям, заканчивались в одной транзакции в моих модульных тестах из-за AbstractTransactionalDataSourceSpringContextTests.

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

Но с тех пор, как я посмотрел на это, прошло довольно много времени, поэтому я мог бы быть далеко от цели.

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