title: Springboot: Required a bean of type 'javax.persistence.EntityManagerFactory' that could not be found
body: <p>I am in the process of developing a Spring Boot application and came across this error when starting the server. I am not sure if I am incorrectly defining any annotations or missing any dependencies. Any help would be appreciated.</p>
  
  <p>Main class:</p>
  
  <pre><code>@SpringBootApplication
  @Configuration
  @ComponentScan
  @EnableAutoConfiguration
  
  public class DemoApplication {
  
      public static void main(String[] args) {
          System.out.println("Hello world");
          SpringApplication.run(DemoApplication.class, args);
      }
  }
  </code></pre>
  
  <p>UserService class:</p>
  
  <pre><code>@Service
  public class UserService implements IUserService {
  
      @Autowired
      private UserDAO userDAO;
  
      @Override
      public List&lt;UserDTO&gt; getAllUsers() {
  
          List&lt;User&gt; entities = userDAO.getUsers();
          List&lt;UserDTO&gt; users = new ArrayList&lt;UserDTO&gt;();//Will never use directly User Object, will be using Tranferable objects
  
          Iterator&lt;User&gt; iterator = entities.iterator();
  
          while(iterator.hasNext()) {
              User user = iterator.next();
              users.add(ApiDTOBuilder.userToUserDTO(user));//We are building UserDTO object.
          }
          return users;
      }
  
      @Override
      public UserDTO getUserByUsername(String username) {
          User user = userDAO.getUser(username);
          return ApiDTOBuilder.userToUserDTO(user);
      }
  
      @Override
      public void createUser(UserDTO user) {
          userDAO.createUser(ApiDTOBuilder.userDTOToUser(user));
      }
  
      @Override
      public void updateUser(UserDTO user) {
          userDAO.updateUser(ApiDTOBuilder.userDTOToUser(user));
  
      }
  
      @Override
      public void deleteUser(String username) {
          userDAO.deleteUser(username);
      }
  }
  </code></pre>
  
  <p>UserDAO class:</p>
  
  <p>@Repository
      public class UserDAO implements IUserDAO {</p>
  
  <pre><code>        @PersistenceContext
          EntityManager em;//JPA EntityManager is used to access a database in a particular application. It is used to manage persistent entity instances, to find entities by their primary key identity(As here is Username), and to query over all entities.
  
          @Override
          @Transactional
          public User getUser(String username) {
              return em.find(User.class, username); //Here entitymanager can find the username as it has the capability to find an entity by unique identifies
          }
  
  
          @Override
          @Transactional
          public List&lt;User&gt; getUsers() {
              List&lt;User&gt; resultList = em.createQuery("FROM user_tbl", User.class).getResultList();
              return resultList;
          }
  
          @Override
          @Transactional
          public void createUser(User user) {
              em.persist(user);//Make an instance managed and persistent.
          }
  
          @Override
          @Transactional
          public void updateUser(User user) {
              em.merge(user);//Merge the state of the given entity into the current persistence context.
          }
  
          @Override
          @Transactional
          public void deleteUser(String username) {
              User user = this.getUser(username);
              em.remove(user);//Remove the entity instance.
          }
  }
  </code></pre>
  
  <p>Build.gradle:</p>
  
  <pre><code>buildscript {
      ext {
          springBootVersion = '2.0.0.RELEASE'
      }
      repositories {
          mavenCentral()
      }
      dependencies {
          classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
      }
  }
  
  apply plugin: 'java'
  apply plugin: 'eclipse'
  apply plugin: 'org.springframework.boot'
  apply plugin: 'io.spring.dependency-management'
  
  group = 'com.example'
  version = '0.0.1-SNAPSHOT'
  sourceCompatibility = 1.8
  
  repositories {
      mavenCentral()
  }
  
  
  dependencies {
      compile('org.springframework.boot:spring-boot-starter-data-jpa')
      compile('org.springframework.boot:spring-boot-starter-web')
      compile('org.springframework.boot:spring-boot-starter-security')
      compile('org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final')
      compile('javax.xml.bind:jaxb-api:2.2.11')
      compile('org.springframework.boot:spring-boot-starter-test:2.0.2.RELEASE')
      compile('com.sun.xml.bind:jaxb-core:2.2.11')
      compile('com.sun.xml.bind:jaxb-impl:2.2.11')
      runtime('org.springframework.boot:spring-boot-devtools')
      runtime('mysql:mysql-connector-java')
      testCompile('org.springframework.boot:spring-boot-starter-test')
  }
  </code></pre>
  
  <p><strong><em>Error message:</em></strong></p>
  
  <pre><code>***************************
  APPLICATION FAILED TO START
  ***************************
  Description:
  
  Field userDAO in com.example.demo.service.UserService required a bean of type 'javax.persistence.EntityManagerFactory' that could not be found.
  Action:
  
  Consider defining a bean of type 'javax.persistence.EntityManagerFactory' in your configuration.
  </code></pre>
  
  <p>I saw all the relevant answers and tried to implement those suggestions like adding dependencies, adding notations in the main class, etc. But it shows the same error. Please someone help me out. Thank you in advance. </p>
  
  <p>P.S: Github link of my application: <a href="https://github.com/heliOpenxCell/demo" rel="nofollow noreferrer">https://github.com/heliOpenxCell/demo</a></p>