Java Spring引导:需要一个名为';实体管理工厂&x27;那是找不到的

Java Spring引导:需要一个名为';实体管理工厂&x27;那是找不到的,java,spring,spring-boot,Java,Spring,Spring Boot,错误: 说明: nashtech.TiennguenM3.config.DataSeedingListener中的Field userRepository需要找不到类型为“nashtech.TiennguenM3.dao.IUserRepository”的bean 行动: 考虑在配置中定义“nashtech.tienngueyenm3.dao.IUserRepository”类型的bean 代码: DataSeedingListener.java package nashtech.tienngu

错误:

说明:

nashtech.TiennguenM3.config.DataSeedingListener中的Field userRepository需要找不到类型为“nashtech.TiennguenM3.dao.IUserRepository”的bean

行动:

考虑在配置中定义“nashtech.tienngueyenm3.dao.IUserRepository”类型的bean

代码:

DataSeedingListener.java

package nashtech.tiennguyenm3.config;

import java.util.HashSet;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

import nashtech.tiennguyenm3.dao.IRoleRepository;
import nashtech.tiennguyenm3.dao.IUserRepository;
import nashtech.tiennguyenm3.model.Role;
import nashtech.tiennguyenm3.model.User;

@Component
public class DataSeedingListener implements ApplicationListener<ContextRefreshedEvent> {
    
    @Autowired
    private IUserRepository userRepository;

    @Autowired
    private IRoleRepository roleRepository;

    @Autowired 
    private PasswordEncoder passwordEncoder;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent arg0) {
        // Roles
        if (roleRepository.findByName("ROLE_ADMIN") == null) {
            roleRepository.save(new Role("ROLE_ADMIN"));
        }

        if (roleRepository.findByName("ROLE_MEMBER") == null) {
            roleRepository.save(new Role("ROLE_MEMBER"));
        }

        // Admin account
        if (userRepository.findByEmail("admin@gmail.com") == null) {
            User admin = new User();
            admin.setEmail("admin@gmail.com");
            admin.setPassword(passwordEncoder.encode("123456"));
            HashSet<Role> roles = new HashSet<>();
            roles.add(roleRepository.findByName("ROLE_ADMIN"));
            roles.add(roleRepository.findByName("ROLE_MEMBER"));
            admin.setRoles(roles);
            userRepository.save(admin);
        }

        // Member account
        if (userRepository.findByEmail("member@gmail.com") == null) {
            User user = new User();
            user.setEmail("member@gmail.com");
            user.setPassword(passwordEncoder.encode("123456"));
            HashSet<Role> roles = new HashSet<>();
            roles.add(roleRepository.findByName("ROLE_MEMBER"));
            user.setRoles(roles);
            userRepository.save(user);
        }
    }
}

当我在@SpringBootApplication之后添加(scanBasePackages={“nashtech.tiennguyenm3”)时,会发生此错误。

为了创建
@Repository
bean,您需要用
@EnableJpaRepositories
注释您的应用程序类

@SpringBootApplication(scanBasePackages={"nashtech.tiennguyenm3"})
@EnableJpaRepositories(basePackageClasses = IUserRepository.class) // <-- add this
public class MusicStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(MusicStoreApplication.class, args);
    }
}
@SpringBootApplication(scanBasePackages={“nashtech.tiennguyenm3”})

@如果您的所有存储库/dao都在包
nashtech.tiennguyenm3.dao下,则启用JParepositories(basePackageClasses=IUserRepository.class)//
然后,您可以添加:

@SpringBootApplication(scanBasePackages={"nashtech.tiennguyenm3"})
@EnableJpaRepositories(basePackages = "nashtech.tiennguyenm3.dao")
public class MusicStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(MusicStoreApplication.class, args);
    }
}
如果它们位于不同的包中,则可以添加以下内容:

@SpringBootApplication(scanBasePackages={"nashtech.tiennguyenm3"})
@EnableJpaRepositories(basePackages = { "nashtech.tiennguyenm3.dao", "the.other.package"})
public class MusicStoreApplication {

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

您是否在
application.properties
(或
application.yml
)中配置了数据库连接?我在POST中添加了application.properties。为什么要从自动配置中排除类?对不起,我不明白!我在哪里从自动配置中排除了类?在EnableAutoConfiguration注释中,
nashtech.tienngueyenm3.dao.IRoleRepository
也会被启用吗?我们试试看:)。应该是的,因为它在同一个包裹里
basePackageClasses
只是
basePackages
的一种类型安全的替代方案,我可以,但我觉得您的答案需要进一步澄清。另外,我假设您在回答OP的问题时,已经用完整的代码亲自尝试过:)
@SpringBootApplication(scanBasePackages={"nashtech.tiennguyenm3"})
@EnableJpaRepositories(basePackageClasses = IUserRepository.class) // <-- add this
public class MusicStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(MusicStoreApplication.class, args);
    }
}
@SpringBootApplication(scanBasePackages={"nashtech.tiennguyenm3"})
@EnableJpaRepositories(basePackages = "nashtech.tiennguyenm3.dao")
public class MusicStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(MusicStoreApplication.class, args);
    }
}
@SpringBootApplication(scanBasePackages={"nashtech.tiennguyenm3"})
@EnableJpaRepositories(basePackages = { "nashtech.tiennguyenm3.dao", "the.other.package"})
public class MusicStoreApplication {

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