我正在为我的休眠搜索实现编写一些 JUnit。
我在内存数据库中使用 HSSQL。我使用 DBUnit 来填充这个 DB(一个 XML 文件)。它绝对可以像其他非搜索测试使用相同的数据一样工作。搜索代码绝对有效,因为我在网络应用程序中尝试过它并返回正确的记录。
我假设 Hibernate Search 只会索引使用 Hibernate 插入的数据库条目。我尝试使用以下方法手动索引数据库:-
fullTextEntityManager.createIndexer().startAndWait();
我把它放在一个在 Spring 初始化后运行的 bean 中
public class SearchIndexer {
@Autowired
private EntityManagerFactory entityManagerFactory;
public SearchIndexer(){
}
@PostConstruct
public void doIndexing(){
EntityManager em = entityManagerFactory.createEntityManager();
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
try {
fullTextEntityManager.createIndexer().startAndWait();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我还将它自动连接到我的 JUnit 类中,并手动运行 doIndexing 方法(以确保在加载数据后正确拾取它)。
@Before
public void setup() throws Exception{
dbUnitAdapter.setup("ClubDaoTest.xml");
searchIndexer.doIndexing();
super.before();
}
dbUnitAdapter 只需要一个 XML 文件并使用 DBUnit 将其插入到数据库中。
实体的注释如下: -
@Field
private String name;
@NotBlank
private String type;
@Field
private String address1;
@Field
private String county;
@Field
private String address2;
@Field
private String town;
@Field
private String country;
@Field
private String postcode;
private String telephone;
private String mobile;
private String fax;
@Field
private String email;
@Field
@NumericField
private long lft;
@Field
@NumericField
private long rgt;
我也尝试过使用休眠(创建俱乐部实体)插入数据,这也没有令人困惑。我将搜索索引位置从 RAM 更改为文件系统,并使用卢克读取它。我可以看到我尝试使用 hibernate 插入的数据,但看不到其他数据,尽管这是我第一次使用 Luke,所以我可能犯了一个错误。