1

我正在为我的休眠搜索实现编写一些 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,所以我可能犯了一个错误。

4

0 回答 0