Я пытаюсь добавить JPA в мой Rest API, но у меня проблемы с настройкой EntityManager. Вот моя конфигурация.
@Configuration
@EnableWebMvc
@EnableJpaRepositories(basePackages = "com.epam.lab.newsmanagement.dao",
entityManagerFactoryRef = "getEntityManagerFactory")
@ComponentScan(basePackages = {"com.epam.lab.newsmanagement.dao",
"com.epam.lab.newsmanagement.validator",
"com.epam.lab.newsmanagement.entity"})
@PropertySource("classpath:persistence.properties")
public class DaoConfig {
private static final String URL;
private static final String USER;
private static final String DRIVER;
private static final String PASSWORD;
private static final String HDM2DDL_AUTO;
private static final String SHOW_SQL;
static {
URL = "javax.persistence.jdbc.url";
USER = "javax.persistence.jdbc.user";
DRIVER = "javax.persistence.jdbc.driver";
PASSWORD = "javax.persistence.jdbc.password";
HDM2DDL_AUTO = "hibernate.hbm2ddl.auto";
SHOW_SQL = "hibernate.show_sql";
}
@Autowired
private Environment environment;
@Bean
public DataSource getDataSource() {
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setJdbcUrl(environment.getProperty(URL));
hikariDataSource.setUsername(environment.getProperty(USER));
hikariDataSource.setPassword(environment.getProperty(PASSWORD));
hikariDataSource.setDriverClassName(environment.getProperty(DRIVER));
return hikariDataSource;
}
@Bean
public JdbcTemplate getJdbcTemplate() {
return new JdbcTemplate(getDataSource());
}
@Bean
public EntityManagerFactory getEntityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan("com.epam.lab.newsmanagement.entity");
em.setJpaProperties(getProperties());
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
em.setPersistenceProviderClass(HibernatePersistenceProvider.class);
return em.getObject();
}
private Properties getProperties() {
Properties properties = new Properties();
properties.put(URL, environment.getProperty(URL));
properties.put(USER, environment.getProperty(USER));
properties.put(DRIVER, environment.getProperty(DRIVER));
properties.put(PASSWORD, environment.getProperty(PASSWORD));
properties.put(HDM2DDL_AUTO, environment.getProperty(HDM2DDL_AUTO));
properties.put(SHOW_SQL, environment.getProperty(SHOW_SQL));
return properties;
}
}
Когда я пытаюсь развернуть свой API в Tomcat, у меня возникает BeanNotOfRequiredTypeException, и следующее сообщение «Ожидается, что компонент с именем« getEntityManagerFactory »будет иметь тип« javax.persistence.EntityManagerFactory », но был на самом деле типа 'org.springframework.beans.factory.support.NullBean' ". Я не понимаю, что не так. Может быть, я забыл что-то добавить.