Для поля entityManagerFactory в com.example.daoImpl.FileDaoImpl требуется компонент типа javax.persistence.EntityManagerFactory, который не может быть найден. - PullRequest
0 голосов
/ 26 декабря 2018

Я получаю сообщение об ошибке. Поле entityManagerFactory в com.example.daoImpl.FileDaoImpl требует bean-компонент типа 'javax.persistence.EntityManagerFactory', который не может быть найден.

вот мой основной класс

@SpringBootApplication(scanBasePackages = "com")
@EnableConfigurationProperties({ FileStorageProperties.class })
@ComponentScan({ "com" })
@EntityScan("com.example.model")

@EnableJpaRepositories(basePackages="com", entityManagerFactoryRef="emf")
public class DemoApplication {

    final static Logger logger = Logger.getLogger(DemoApplication.class);

    public static void main(String[] args) {

        logger.info("Application is Started");
        new File(FileUploadController.uploadDirectory).mkdir();
        SpringApplication.run(DemoApplication.class, args);
    }
}

Вот мой класс FileDaoImpl

@Repository
public class FileDaoImpl implements FileDao{

    @Autowired
    EntityManagerFactory entityManagerFactory;

    @Override
    public void encryptKey(EncryptKeys keys) {

        EntityManager em = entityManagerFactory.createEntityManager();
      em.persist(keys);
    }

класс обслуживания

@Service
public class FileStorageService {
 @Autowired
    FileDao filedao;
 public void encryptKey(EncryptKeys encryptKeys) {

         filedao.encryptKey(encryptKeys);
    }

что не так с этим кодом.

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018
 @EnableJpaRepositories(basePackages="com", entityManagerFactoryRef="emf")

Он пытается найти компонент "emf" для использования его в качестве entityManagerFactoryRef, я не знаю, мб, вы объявляете этот компонент где-то еще, но если нет, сделайте это

@Bean(name = "emf")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("dataSource") DataSource dataSource) {
    LocalContainerEntityManagerFactoryBean em = builder
            .dataSource(dataSource)
            .packages("com")
            .persistenceUnit("someNameForUnit")
            .build();

   /* HashMap<String, Object> properties = new HashMap<>();
    properties.put("hibernate.hbm2ddl.auto", hbm2ddl);
    properties.put("hibernate.dialect", hibernateDialog);
    properties.put("hibernate.show_sql", showSql);
    properties.put("hibernate.format_sql", formatSql);
    em.setJpaPropertyMap(properties); */ this can set some property of jpa 
    return em;
}

Но ядумаю, что лучшее решение, пусть весенний ботинок сделает эту работу, как упомянуто выше.

0 голосов
/ 26 декабря 2018

Пожалуйста, внесите следующие изменения и попробуйте

@SpringBootApplication(scanBasePackages = "com")
@EnableConfigurationProperties({ FileStorageProperties.class })
//@ComponentScan({ "com" }) not needed since SpringBootApplication will fulfill this
@EntityScan("com.example.model")

@EnableJpaRepositories("com") // allow spring-boot-starter-data-jpa to do the needful
public class DemoApplication {

    final static Logger logger = Logger.getLogger(DemoApplication.class);

    public static void main(String[] args) {

        logger.info("Application is Started");
        new File(FileUploadController.uploadDirectory).mkdir();
        SpringApplication.run(DemoApplication.class, args);
    }
}
0 голосов
/ 26 декабря 2018

попробуйте

@PersistenceContext
private EntityManager entityManager;

и мой тестовый пример ниже, он работает для меня

@Service
@Transactional
public class TestRepo {

 @PersistenceContext
 private EntityManager entityManager;

 public void testPersist(){
    User user = new User();
    user.setUsername("persistTest");
    user.setPassword("testPwd");
    user.setRole("testRole");
    user.setUserId("testId");
    entityManager.persist(user);
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...