programing

스프링 부트 - 저장소 필드에는 'entityManagerFactory'라는 이름의 빈을 찾을 수 없습니다.

javajsp 2023. 3. 25. 09:54

스프링 부트 - 저장소 필드에는 'entityManagerFactory'라는 이름의 빈을 찾을 수 없습니다.

Spring Boot 어플리케이션 개발 중에 서버를 시작할 때 이 오류가 발생했습니다.주석을 잘못 정의했거나 종속성이 누락되었는지 확신할 수 없습니다.어떤 도움이라도 주시면 감사하겠습니다.

메인 클래스:

@SpringBootApplication
public class FantasyManagerApplication {

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

리그 서비스자바:

@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);
    }

}

리그리포지토리.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.

spring-boot-syslog-data-jpa는 필요한 휴지 상태의 의존관계를 모두 가져옵니다.스프링 부트 릴리스 1.5.1을 사용하면 hibernate-core: 5.0.11hibernate-entitymanager: 5.0.11을 가져옵니다.불필요할 뿐만 아니라, 휴지 상태의 의존 관계 버전이 일치하지 않기 때문에, 에러가 발생하고 있는 것이 원인이라고 생각됩니다.

이러한 의존관계를 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>

이러한 의존 관계를 시험해 보십시오.

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

프로세스 수집 중 Spring Data JPA에 hibernate-core 5.2.0 문제가 발생.Spring Data JPA를 사용하는 경우 Spring Data JPA에서는 Hibernate-core 5.2.1 이상을 사용할 수 있습니다.

휴지 상태 이후 5.2.0부터는 휴지 상태-엔티티 매니저가 필요하지 않습니다.

변경해 보겠습니다.

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

이 버전:

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

이것으로 나는 해결되었다.

이 문제는 버전 불일치가 원인일 수 있습니다.다음과 같이 종속성을 지정하면 문제를 해결할 수 있습니다(버전은 언급되지 않으므로 자동으로 관리됨).

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


    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

종속성을 삭제해 보십시오.

  • ~/.m2/리포지토리(Linux)
  • C: / Users / your _ user / . m2 / repository ( Windows )

또한 IDE의 업데이트 종속성 기능을 사용하거나 프로젝트 폴더에서 mvn 설치를 실행하여 프로젝트 종속성을 추가로 업데이트할 수 있습니다.

데이터 소스가 2개인 경우 데이터 소스 중 하나에 @Primary를 추가합니다.

나는 그 문제를 다시 발견했다.내가 한 일은 폼 의존도를 바꾼 것이다.

spring-data-jpa에서

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-data-jpa</artifactId>
</dependency>

spring-boot-starter-data-jpa로 이동합니다.

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

추가 휴지 상태 관련 종속성은 없습니다.

언급URL : https://stackoverflow.com/questions/42182426/spring-boot-repository-field-required-a-bean-named-entitymanagerfactory-that