有没有可能在不使用hibcore的情况下使用hib搜索特性来处理数据库的内容?我想创建一个带有标准Hibernate搜索注解的Bean,并手动存储所有内容以用于测试(我不想创建Hibernate表以用于测试)。对于一个要用@Indexed注解的类,我需要它是一个@实体,但是因为我没有为这个类指定我的数据库内容,所以我得到了一个错误。我的问题是:如何将Hibernate搜索仅用于Lucene管理?
irtuqstp1#
我想问题是你的最终目标是什么?你想在生产中使用Hibernate搜索而不使用Hibernate ORM,还是你只是在寻找一些测试解决方案?实际上,您可以独立使用Hibernate Search而不使用Hibernate ORM,但是,您必须实现多个SPI协定,这很麻烦,但也有可能。事实上,Infinispan Query(Infinispan -https://github.com/infinispan/infinispan/tree/master/query的查询功能)正是这样做的。它使用Hibernate Search引擎w/o ORM部分。搜索团队正在进行的工作是使不使用ORM的搜索更容易。请密切关注即将发布的版本。如果您只是在寻找某种方法来测试Hibernate Search + ORM,那么您最好使用内存中的数据库,这是在这种情况下进行单元测试的最简单的方法。
p4tfgftt2#
最后,您的Hibernate需要知道数据库配置。当您注意到Hibernate日志时,Hibernate引擎将首先注册类型,第二步,它将查找Hibernate配置属性,并在接下来的步骤中进行解析和验证。我在这里的观点是,Hibernate必须已被告知数据库信息...顺便说一下,您还可以发布错误详细信息以获得进一步的帮助。干杯!
7xllpg7q3#
如果其他方法都失败了,你可以使用in-memorydatabases的one,它们会在你运行测试后自毁。
q8l4jmvw4#
这就是它的工作方式(如果您有一个数据库,但您不想将索引的内容存储到其中):创建一个包含所有所需信息的虚拟实体类,并按如下方式操作(示例来自我的包含Suggest类的代码)
Transaction tx = fullTextSession.beginTransaction(); fullTextSession.purgeAll(Suggest.class); SuggestionFinder suggestionFinder = context .getBean(SuggestionFinder.class); List<Suggest> toDelete = new ArrayList<>(); int i = 0; for (Suggest sugg : suggestionFinder.findSuggestionsForIndex()) { fullTextSession.save(sugg); toDelete.add(sugg); fullTextSession.index(sugg); if (i++ % 1000 == 0) { fullTextSession.flushToIndexes(); for (Suggest cur : toDelete) { fullTextSession.delete(cur); } toDelete.clear(); } } fullTextSession.flushToIndexes(); for (Suggest cur : toDelete) { fullTextSession.delete(cur); } toDelete.clear(); fullTextSession.getSearchFactory().optimize(Suggest.class); tx.commit();
编辑:我已经实现了一个独立的Hibernate搜索版本:https://github.com/Hotware/Hibernate-Search-JPA/tree/master/hibernate-search-standalone
4条答案
按热度按时间irtuqstp1#
我想问题是你的最终目标是什么?你想在生产中使用Hibernate搜索而不使用Hibernate ORM,还是你只是在寻找一些测试解决方案?
实际上,您可以独立使用Hibernate Search而不使用Hibernate ORM,但是,您必须实现多个SPI协定,这很麻烦,但也有可能。事实上,Infinispan Query(Infinispan -https://github.com/infinispan/infinispan/tree/master/query的查询功能)正是这样做的。它使用Hibernate Search引擎w/o ORM部分。搜索团队正在进行的工作是使不使用ORM的搜索更容易。请密切关注即将发布的版本。
如果您只是在寻找某种方法来测试Hibernate Search + ORM,那么您最好使用内存中的数据库,这是在这种情况下进行单元测试的最简单的方法。
p4tfgftt2#
最后,您的Hibernate需要知道数据库配置。当您注意到Hibernate日志时,Hibernate引擎将首先注册类型,第二步,它将查找Hibernate配置属性,并在接下来的步骤中进行解析和验证。我在这里的观点是,Hibernate必须已被告知数据库信息...顺便说一下,您还可以发布错误详细信息以获得进一步的帮助。
干杯!
7xllpg7q3#
如果其他方法都失败了,你可以使用in-memorydatabases的one,它们会在你运行测试后自毁。
q8l4jmvw4#
这就是它的工作方式(如果您有一个数据库,但您不想将索引的内容存储到其中):
创建一个包含所有所需信息的虚拟实体类,并按如下方式操作(示例来自我的包含Suggest类的代码)
编辑:
我已经实现了一个独立的Hibernate搜索版本:
https://github.com/Hotware/Hibernate-Search-JPA/tree/master/hibernate-search-standalone