0

我正在为 Hibernate Search (Lucene) 存储库编写 JUnit 测试。在一个@Before方法中,我持久化一个实体,然后在一个@Test方法中,我想搜索它。问题是,在运行测试方法时,索引显然没有更新。

我的测试类用@Transactional. 我尝试只用 注释该@Before方法@Transactional,但我一定做错了,因为 Hibernate Search 抱怨在索引时缺少会话(尝试访问延迟加载的属性)。

我什sleep()至在测试方法的开头尝试了 ing,但无济于事。

我尝试调用Search.getFullTextEntityManager(entityManager).createIndexer().startAndWait()@Before方法,但这似乎永远运行。

4

1 回答 1

1

将测试注释为事务性不是一个好主意,因为您可能需要控制事务。Hibernate Search 将在事务提交时刷新对索引的更改:您需要在运行查询之前提交事务。

作为替代方案,FullTextSession有一个方法flushToIndexes(),您可以使用它来强制立即刷新,但是您并没有测试完整的端到端事务行为。此外,如果您刷新对索引的更改,事务回滚不会撤消它们,因此如果您尝试进行事务测试以保持它们独立,那还不够好。

于 2013-10-02T00:22:06.213 回答