2017-02-11 225 views
4

我正在開發Spring Boot應用程序,並在啓動服務器時遇到此錯誤。我不確定我是否錯誤地定義了任何註釋或缺少任何依賴關係。任何幫助,將不勝感激。Spring Boot - repository字段需要一個名爲'entityManagerFactory'的bean無法找到

主要類:

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

錯誤:

*************************** 
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. 
+0

貌似你沒有JPA自動配置運行。確保你有起動器和數據庫連接。 – chrylis

+0

@chrylis - 如何運行JPA自動配置?我在application.properties中建立了一個到mysql數據庫的連接 – Dheeraj

+7

你有不匹配的Hibernate依賴關係。只需刪除版本號並讓Boot管理它們即可。 – chrylis

回答

11

彈簧引導起動數據JPA會拉你需要的所有Hibernate依賴。使用1.5.1版本的spring boot,它會在hibernate-core:5.0.11hibernate-entitymanager:5.0.11。除了是不必要的,你的hibernate依賴版本是不匹配的,這是我猜測導致錯誤的原因。

嘗試從您的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> 
0

嘗試這些依賴

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency> 
<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
</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> 
相關問題