web-dev-qa-db-fra.com

Spring Boot - le champ du référentiel nécessitait un bean nommé 'entityManagerFactory' introuvable.

Je suis en train de développer une application Spring Boot et je suis tombé sur cette erreur lors du démarrage du serveur. Je ne sais pas si je définis de manière incorrecte des annotations ou si je manque des dépendances. Toute aide serait appréciée.

Classe principale:

@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>

Erreur:

***************************
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.
9
Dheeraj

spring-boot-starter-data-jpa attirera toutes les dépendances d'hibernation dont vous avez besoin. En utilisant la version de démarrage 1.5.1, il récupérera hibernate-core: 5.0.11 et hibernate-entitymanager: 5.0.11 . En plus d'être inutiles, vos versions de dépendance d'hibernation sont incompatibles, ce qui, je suppose, est à l'origine de l'erreur.

Essayez de supprimer ces dépendances de votre 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>
18
kyleus

Essayez ces dépendances

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>   
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
</dependency>

au lieu de:

<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>
2
Jules S.

Hibernate-core 5.2.0 a un problème avec Spring Data JPA lors de la collecte des processus. Hibernate-core 5.2.1 et versions ultérieures convient à Spring Data JPA lorsque vous utilisez Spring Data JPA.

À partir de l'hibernation 5.2.0. hibernate-entitymanager n'est plus nécessaire.

Alors essayez de changer:

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-core</artifactId>
 <version>4.1.4.Final</version>
</dependency>

Vers cette version:

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-core</artifactId>
 <version> 5.2.1.Final</version>
</dependency>

Cela a résolu le problème pour moi.

1
user9347049

Essayez de supprimer vos dépendances de 

  • ~/.m2/repository (Linux)
  • C:/Utilisateurs/votre_utilisateur /. M2/référentiel (Windows)

et mettre davantage à jour les dépendances de votre projet soit via la fonctionnalité update dependencies de votre IDE, soit en exécutant mvn install à partir du dossier de votre projet.

0
malvadao