2015-06-07 3 views
0

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

Что я могу сделать? Autowired SessionFactory существует, но вызов его getCurrentSession().flush() ничего не делает.

<beans profile="test"> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 
</beans> 

в то время как это:

<bean id="sessionFactory" class="org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean">  
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

вызывает org.hibernate.HibernateException: No CurrentSessionContext configured!

+1

Зачем использовать сеанс Hibernate для очистки? Используйте EntityManager.flush(). –

+0

Поскольку у меня нет доступа к EntityManagers, я использую весенние данные –

+1

И что? Внесите диспетчер объектов с помощью '@PersistenceContext EntityManager em;'. –

ответ

0

Хорошо, я был успешным подклассы моих spring-dataRepository классов от JPARepository, а затем с помощью repo.flush()

Примечания предупреждения - флеш сбрасывает все кешированные объекты, а не только те, которые управляются r epository. Поэтому, если ваш репозиторий public class BookRepo implements JPARepository<Book>, вызов bookRepo.flush() также будет содержать все ваши Author, Reader и объекты w/e.

Смежные вопросы