Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用EntityManager配置Hibernate搜索_Hibernate_Jpa_Spring Data_Entitymanager_Hibernate Search - Fatal编程技术网

使用EntityManager配置Hibernate搜索

使用EntityManager配置Hibernate搜索,hibernate,jpa,spring-data,entitymanager,hibernate-search,Hibernate,Jpa,Spring Data,Entitymanager,Hibernate Search,我想将Hibernate搜索添加到我的项目中,我编写这样的示例代码来测试它 EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("pu"); EntityManager em = entityManagerFactory.createEntityManager(); FullTextEntityManager fullTextSession = Search.getFullT

我想将Hibernate搜索添加到我的项目中,我编写这样的示例代码来测试它

 EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("pu");
 EntityManager em = entityManagerFactory.createEntityManager();

 FullTextEntityManager fullTextSession = Search.getFullTextEntityManager(em);
 em.getTransaction().begin();

 QueryBuilder builder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Place.class).get();

 double centerLatitude = 0d;
 double centerLongitude = 0d;
 org.apache.lucene.search.Query luceneQuery = builder
                .spatial()
                .within(100, Unit.KM)
                .ofLatitude(centerLatitude)
                .andLongitude(centerLongitude)
                .createQuery();

 javax.persistence.Query jpaQuery =
                fullTextSession.createFullTextQuery(luceneQuery, Place.class);

  List result = jpaQuery.getResultList();

 em.getTransaction().commit();
 em.close();
我得到了这样的例外

javax.persistence.PersistenceException: No Persistence provider for EntityManager named pu
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    pl.project.repository.place.CustomPlaceRepositoryImpl.findAll(CustomPlaceRepositoryImpl.java:24)
    pl.project.service.place.PlaceServiceImpl.findNearest(PlaceServiceImpl.java:157)
    pl.project.webapp.HomeController.helloFacebook(HomeController.java:41)
这是我的存储库配置

 @Configuration
 @EnableTransactionManagement
 @EnableAspectJAutoProxy(proxyTargetClass = true)
 @PropertySource("classpath:jdbc.properties")
 @EnableJpaRepositories(value = "pl.project")
 @ComponentScan(basePackages = "pl.project.repository", includeFilters =     @ComponentScan.Filter(value = Repository.class, type =  FilterType.ANNOTATION))
 public class RepositoryConfig {

    //...

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setPersistenceUnitName("pu");
        entityManagerFactoryBean.setDataSource(dataSource());
        entityManagerFactoryBean.setPackagesToScan("pl.project.model");
        entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter());
        entityManagerFactoryBean.setJpaProperties(jpaProperties());
        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
        return entityManagerFactoryBean;
    }

    @Bean
    public Properties jpaProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", hbm);
        properties.setProperty("hibernate.enable_lazy_load_no_trans", "true");
        return properties;
    }

    @Bean
    public HibernateJpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();            hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect");
        return hibernateJpaVendorAdapter;
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);
        return transactionManager;
    }

    @Bean
    public DriverManagerDataSource dataSource() {
        //... driver, pass, username
        return dataSource;
    }
}
我已经在名为
pu
entityManagerFactory()
中创建了持久化单元,为什么会出现异常?在我添加Hibernate搜索之前,此存储库配置已起作用

我需要添加
persistence.xml
?有没有办法通过JavaConfig来配置它

我的依赖

    <!-- Hibernate -->

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.0.1.Final</version>
    </dependency>


    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-search-orm</artifactId>
        <version>5.5.3.Final</version>
    </dependency>

org.hibernate
冬眠核心
5.0.1.最终版本
org.hibernate
休眠实体管理器
5.0.1.最终版本
org.hibernate
休眠搜索orm
5.5.3.最终版本

您通过Spring的
LocalContainerEntityManagerFactoryBean设置了持久性单元,但随后使用普通JPA(
持久性
)来获得它


因此,您需要使用Spring通过依赖项注入获得实体管理器(工厂),或者设置persistence.xml以便通过普通JPA获得它。

您通过Spring的
LocalContainerEntityManagerFactoryBean设置了持久化单元,但随后使用普通JPA(
持久化
)为了得到它


因此,您要么需要使用Spring通过依赖项注入获得实体管理器(工厂),要么设置persistence.xml以便通过普通JPA获得它。

您是否验证了您的类路径没有多个版本的hibernate?您使用的Hiberate Search&Core版本是什么?我添加了有问题的hibernate依赖项。您是否验证了您的类路径没有多个hibernate版本?你在使用什么版本的Hiberate Search&Core?我在问题中添加了我的hibernate依赖项。你是对的,我的错误是无知造成的。我使用了
@PersistenceContext-EnitityManager-em而不是尝试创建新的持久性单元。在使用JPA/Hibernate几个月后,我仍然觉得没有自信。你是对的,我的错误是无知造成的。我使用了
@PersistenceContext-EnitityManager-em而不是尝试创建新的持久性单元。在使用JPA/Hibernate几个月后,我仍然感到不自信。