Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot - repository field required a bean named 'entityManagerFactory' that could not be found

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.

Main class:

@SpringBootApplication public class FantasyManagerApplication {      public static void main(String[] args) {         SpringApplication.run(FantasyManagerApplication.class, args);     } } 

LeagueService.java:

@Service public class LeagueService {      @Autowired     private LeagueRepository leagueRepository;     @Autowired     private PlayerRepository playerRepository;     @Autowired     private TeamRepository teamRepository;      /**      * Returns a list of all the leagues in the database       * @return List<League>      */     public List<League> getAllLeagues(){         List<League> leagues = new ArrayList<>();         leagueRepository.findAll()         .forEach(leagues::add);         return leagues;     }      /**      * Find details for a particular League      * @param leagueId      * @return League      */     public League getLeagueById(long leagueId){         return leagueRepository.findOne(leagueId);     }      /**      * Find the leagueSettings for a particular League        * @param leagueId      * @return LeagueSettings      */     public LeagueSettings getLeagueSettingsById(long leagueId){         return leagueRepository.findOne(leagueId).getLeagueSettings();     }       /**      * Returns a list of all the Team's in the League      * @param leagueId      * @return List<Team>      */     public List<Team> getTeamsInLeague(long leagueId){         List<Team> teams = new ArrayList<>();         leagueRepository.findOne(leagueId).getTeams()         .forEach(teams::add);         return teams;      }      /**      * Returns a list of all the Player's in the League      * @param leagueId      * @return List<Player>      */     public List<Player> getPlayersInLeague(long leagueId){         List<Player> players = new ArrayList<>();         leagueRepository.findOne(leagueId).getPlayers()         .forEach(players::add);         return players;          }      /**      * Returns a list of all the User's in the League      * @param leagueId      * @return List<User>      */     public List<User> getUsersInLeague(long leagueId){         List<User> users = new ArrayList<>();         leagueRepository.findOne(leagueId).getUsers()         .forEach(users::add);         return users;            }       /**      * Add League to database      * @param league      */     public void addLeague(League league){         leagueRepository.save(league);     }      /**      * Assign LeagueSettings for a League      * @param userId      * @param leagueSettings      */     public void assignLeagueSettings(long leagueId, LeagueSettings leagueSettings){         League league = leagueRepository.findOne(leagueId);         league.setLeagueSettings(leagueSettings);         leagueRepository.save(league);       }      /**      * Assign a Player to a League and vice versa      * @param leagueId      * @param playerId      */     public void assignPlayerToLeague(long leagueId, long playerId){         //Find the league and player from the database         League league = leagueRepository.findOne(leagueId);         Player player = playerRepository.findOne(playerId);          //Get the players that the league already has         List<Player> players = new ArrayList<>();         players = league.getPlayers();          //Get the leagues that the player is part of         List<League> leagues = new ArrayList<>();         leagues = player.getLeagues();          //Assign player to this league and vice versa         leagues.add(league);         players.add(player);         league.setPlayers(players);         player.setLeagues(leagues);          //Update changes in database         playerRepository.save(player);         leagueRepository.save(league);     }      /**      * Assign a Team to a League and vice versa      * @param leagueId      * @param teamId      */     public void assignTeamToLeague(long leagueId, long teamId){         //Find the league and player from the database         League league = leagueRepository.findOne(leagueId);         Team team = teamRepository.findOne(teamId);          //Get the teams that are already in the league         List<Team> teams = new ArrayList<>();         teams = league.getTeams();          //Assign team to this league and vice versa         teams.add(team);         league.setTeams(teams);         team.setLeague(league);          //Update changes in database         teamRepository.save(team);         leagueRepository.save(league);     }       /**      * Edit the details for a particular League      * @param league      */     public void updateLeague(League league, long leagueId){         leagueRepository.save(league);     }       /**      * Delete the League from the database      * @param leagueId      */     public void deleteLeague(long leagueId){         leagueRepository.delete(leagueId);     }  } 

LeagueRepository.java

public interface LeagueRepository extends CrudRepository<League, Long> {  } 

pom.xml:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>      <groupId>com.dheeraj</groupId>     <artifactId>fantasy-manager</artifactId>     <version>0.0.1-SNAPSHOT</version>     <packaging>jar</packaging>      <name>fantasy-manager</name>     <description>Fantasy Manager Application</description>      <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>1.5.1.RELEASE</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>      <properties>         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>         <java.version>1.8</java.version>     </properties>      <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-data-jpa</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-security</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.hibernate</groupId>             <artifactId>hibernate-core</artifactId>             <version>4.1.4.Final</version>         </dependency>         <dependency>             <groupId>org.hibernate</groupId>             <artifactId>hibernate-entitymanager</artifactId>             <version>5.2.3.Final</version>         </dependency>     </dependencies>      <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build>   </project> 

Error:

*************************** APPLICATION FAILED TO START ***************************  Description:  Field leagueRepository in com.dheeraj.service.LeagueService required a bean named 'entityManagerFactory' that could not be found.   Action:  Consider defining a bean named 'entityManagerFactory' in your configuration. 
like image 786
Dheeraj Avatar asked Feb 11 '17 23:02

Dheeraj


People also ask

What is LocalContainerEntityManagerFactoryBean?

The LocalContainerEntityManagerFactoryBean gives full control over EntityManagerFactory configuration and is appropriate for environments where fine-grained customization is required. The LocalContainerEntityManagerFactoryBean will create a PersistenceUnitInfo based on the persistence.

What do you have to configure to use JPA with Spring?

To use JPA in a Spring project, we need to set up the EntityManager. This is the main part of the configuration, and we can do it via a Spring factory bean.

What is EnableJpaRepositories?

Spring Data Jpa provides EnableJpaRepositories annotation which is used to scan the packages for configuration and repository class for Spring Data JPA.


1 Answers

spring-boot-starter-data-jpa will pull in all the hibernate dependencies you need. Using spring boot release 1.5.1, it will pull in hibernate-core:5.0.11 and hibernate-entitymanager:5.0.11. In addition to being unnecessary, your hibernate dependency versions are mismatched which is what I'm guessing is causing the error.

Try removing these dependencies from your pom.xml.

<dependency>     <groupId>org.hibernate</groupId>     <artifactId>hibernate-core</artifactId>     <version>4.1.4.Final</version> </dependency> <dependency>     <groupId>org.hibernate</groupId>     <artifactId>hibernate-entitymanager</artifactId>     <version>5.2.3.Final</version> </dependency> 
like image 61
kyleus Avatar answered Sep 23 '22 17:09

kyleus