Hibernate Search替代方法通过注释映射实体

时间:2017-05-24 05:22:15

标签: java spring hibernate gradle hibernate-search

据我所知,没有 XML替代来映射 Hibernate Search 的实体。但是,拥有用于搜索的XML配置可能不是一个好主意。但在我的具体情况下,我有一个gradle多模块Spring项目,如 -

  • 常见包含公共实体和服务
  • 抓取工具这使用公共实体并拥有自己的服务
  • 搜索这也使用公共实体并包含与搜索相关的服务

这不是一个单独的项目,而是我从 crawler.war search.war 中生成单独的 war 。所以你看我需要为所有单独的模块使用公共实体,从而分离生成的war。因此,不应期望在公共实体中直接使用Hibernate Search映射注释。

现在我想知道在搜索模块中导入Hibernate Search注释时,有什么方法可以将常用实体注入其中吗?

[非常感谢任何其他与项目结构相关的建议或建议]

提前致谢。

1 个答案:

答案 0 :(得分:4)

如文档中所述,您可以使用programmatic mapping 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;
    }
}

然后配置Hibernate Search以使用此类作为映射源,如下所示。

  • 如果您使用.properties文件进行与Hibernate相关的配置:

    hibernate.search.model_mapping = com.acme.MyAppSearchMappingFactory
    
  • 如果您使用persistence.xml文件进行与Hibernate相关的配置:

    <persistence ...>
        <persistence-unit name="...">
            ...
            <properties>
                <property name="hibernate.search.model_mapping"
                          value="com.acme.MyAppSearchMappingFactory"/>
            </properties>
        </persistence-unit>
    </persistence>