据我所知,没有XML替代方法可以为休眠搜索映射实体。不过,使用用于搜索的 XML 配置可能不是一个好主意。但在我的特定情况下,我有一个 gradle 多模块 Spring 项目,例如 -
通用- :包含通用实体和服务
- 爬虫:使用公共实体并拥有自己的服务 搜索
- :这也使用通用实体并包含与搜索相关的服务
这不是一个单一的项目,而是我从中生成单独的战争,如crawler.war或search.war。所以你看我需要对所有单独的模块使用公共实体,从而单独生成战争。因此,不应期望直接在公共实体中使用休眠搜索映射注释。
现在我想知道在搜索模块中导入公共实体时,有什么方法可以将它们与休眠搜索注释融合在一起?
[非常感谢任何其他与项目结构相关的建议或建议]
提前谢谢。
如文档中所述,您可以使用编程映射 API。
基本上,在你的"搜索"项目中,你必须编写一个定义映射的类:
public class MyAppSearchMappingFactory {
@Factory
public SearchMapping getSearchMapping() {
SearchMapping mapping = new SearchMapping();
mapping
.analyzerDef( "en", StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( EnglishPorterFilterFactory.class )
.entity(Address.class).indexed()
.property("addressId", ElementType.METHOD)
.documentId()
.name("id")
.property("street1", ElementType.METHOD)
.field()
.analyzer("en")
.store(Store.YES)
.field()
.name("address_data")
.analyzer("en");
return mapping;
}
}
然后将休眠搜索配置为使用此类作为映射的源,如下所示。
如果您将
.properties
文件用于与休眠相关的配置:hibernate.search.model_mapping = com.acme.MyAppSearchMappingFactory
如果您将
persistence.xml
文件用于与休眠相关的配置:<persistence ...> <persistence-unit name="..."> ... <properties> <property name="hibernate.search.model_mapping" value="com.acme.MyAppSearchMappingFactory"/> </properties> </persistence-unit> </persistence>