JPA - BeanNotOfRequiredTypeException - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь добавить 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' ". Я не понимаю, что не так. Может быть, я забыл что-то добавить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...