프로젝트에 Hibernate Search를 추가하고 싶습니다. 이것을 테스트하기 위해 이와 같은 샘플 코드를 작성합니다.EntityManager를 사용하여 Hibernate Search 구성하기
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로 구성하는 방법이 있습니까?
내 dependecies
<!-- 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>
클래스 패스에 여러 버전의 최대 절전 모드가 없는지 확인 했습니까? Hiberate Search & Core의 어떤 버전을 사용하고 있습니까? – Naros
질문에 최대 절전 모드 의존성을 추가했습니다. –