当前位置: 首页 > 知识库问答 >
问题:

找不到someService所需的名为“entityManagerFactory”的bean

公良鸿畅
2023-03-14

我被这个问题缠住了。当我尝试运行我的Spring启动应用程序时,我会收到以下消息:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.todolist.service.TaskService required a bean named 'entityManagerFactory' that could not be found.


Action:

Consider defining a bean named 'entityManagerFactory' in your configuration. 

我正在使用Spring Data JPA,如果我理解正确的话,当我使用例如JpaRepository接口时,entityManager会自动实现到我的项目中。我是否遗漏了什么?即使我使用的是JpaRepository,我是否应该为entityManager定义一个bean?我尝试将其更改为CrudRepository,添加了Hibernate实体管理器等的依赖项,尝试在主端类中为注释指定基包,尝试在线找到解决方案,但似乎没有什么是正确的。

这是我的存储库界面:

@Repository
public interface TaskRepository extends JpaRepository<Task, UUID> {

}

使用此存储库的服务:

@Service
public class TaskService {

    private final TaskRepository taskRepository;
    private final ModelMapper modelMapper;
    private final TaskMapper taskMapper;

    public TaskService(TaskRepository taskRepository, ModelMapper modelMapper, TaskMapper taskMapper) {
        this.taskRepository = taskRepository;
        this.modelMapper = modelMapper;
        this.taskMapper = taskMapper;
    }


    @Transactional
    public TaskDTO addTask(CreateTaskDTO createTaskDTO) {
        Task task = taskMapper.mapToEntity(createTaskDTO);
        taskRepository.save(task);
        return taskMapper.mapToDto(task);
    }

    @Transactional
    public List<TaskDTO> fetchAll() {
        List<Task> all = taskRepository.findAll();
        return taskMapper.mapToDto(all);
    }

    @Transactional
    public TaskDTO findById(UUID id) {
        Optional<Task> task = taskRepository.findById(id);
        return task.map(taskMapper::mapToDto).orElse(null);
    }

}
@Component
public class TaskMapper {

    public TaskDTO mapToDto(Task task) {
        TaskDTO taskDTO = new TaskDTO();
        taskDTO.setCategory(task.getCategory());
        taskDTO.setDeadline(task.getDeadline());
        taskDTO.setDescription(task.getDescription());
        taskDTO.setId(task.getId());
        taskDTO.setPriority(task.getPriority());
        return taskDTO;
    }

    public List<TaskDTO> mapToDto(List<Task> taskList) {
        if (Optional.ofNullable(taskList).isEmpty()) {
            return new ArrayList<>();
        } else {
            return taskList.stream()
                    .map(this::mapToDto)
                    .collect(Collectors.toList());
        }
    }
    
    public Task mapToEntity(CreateTaskDTO createTaskDTO) {
        Task task = new Task();
        task.setCategory(createTaskDTO.getCategory());
        task.setDeadline(createTaskDTO.getDeadline());
        task.setDescription(createTaskDTO.getDescription());
        task.setPriority(createTaskDTO.getPriority());
        return task;
    }
}

实体类:

@Entity
@NoArgsConstructor
@Getter
@Setter
@Table(name = Task.TABLE_NAME)
public class Task {

    public static final String TABLE_NAME = "task";
    public static final String COLUMN_PREFIX = "t_";

    public Task(String description, Category category, int priority, LocalDate deadline) {
        this.id = id;
        this.description = description;
        this.category = category;
        this.priority = priority;
        this.deadline = deadline;
    }

    @Id
    @GeneratedValue
    @Type(type = "uuid-char")
    private UUID id;

    @Size(min = 4, max = 20, message = "{task.validation.description}")
    @NotNull(message = "{task.validation.null}")
    @Column(name = COLUMN_PREFIX + "id")
    private String description;

    @NotNull(message = "{task.validation.null}")
    @Column(name = COLUMN_PREFIX + "category")
    private Category category;

    @Min(value = 1, message = "{task.validation.priority}")
    @Max(value = 5, message = "{task.validation.priority}")
    @Column(name = COLUMN_PREFIX + "priority")
    private int priority;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Column(name = COLUMN_PREFIX + "deadline")
    private LocalDate deadline;
}

dto:

@Data
public class CreateTaskDTO {

    private String description;
    private Category category;
    private int priority;
    private LocalDate deadline;
}


@Data
@NoArgsConstructor
public class TaskDTO {

    private UUID id;
    private String description;
    private Category category;
    private int priority;
    private LocalDate deadline;
}

注入beans的类:

@Configuration
public class Beans {

    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
}

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>todolist</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>todolist</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.22.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <version>4.5.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>2.6.6</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.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>2.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>3.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>testcontainers</artifactId>
            <version>1.16.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>1.16.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>mysql</artifactId>
            <version>1.16.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.1</version>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

应用程序类别:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }, scanBasePackages = "com.todolist")
@EntityScan
@EnableJpaRepositories
public class TodolistApplication {

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

}

共有2个答案

袁华清
2023-03-14

您忘记在TaskService类的构造函数顶部添加@Autowire

@Autowire
public TaskService(TaskRepository taskRepository, ModelMapper modelMapper, TaskMapper taskMapper) {
        this.taskRepository = taskRepository;
        this.modelMapper = modelMapper;
        this.taskMapper = taskMapper;
    }
桓瀚
2023-03-14

将此依赖项添加到 pom.xml

HibernateHibernate实体管理器 5.2.3.final

 类似资料:
  • 我正在开发一个小应用程序,只是为了自己尝试Spring Boot。它有五个不同的模块(eclipse项目): 模型——包含实体类、DTO和映射器以在它们之间切换 数据--包含存储库 服务——包含服务及其实现 reserve management--包含预订控制器和spring应用程序本身 人员管理-包含人员数据的控制器和Spring应用程序本身 如果我启动这两个应用中的任何一个,它们都可以正常运行

  • 使用spring boot 2.0版本。0.M4我有这个问题:

  • 我正在尝试部署我的spring应用程序。以下是pom的副本。xml文件。 以下是申请的副本。属性文件。 我得到的错误跟踪如下。 我被夹在中间。我几乎没试过什么东西。因为提供entityManager的hibernate JPA启动器是从pom中删除hibernate核心和hibernate实体管理器的。xml也是如此。但我也犯了同样的错误。除此之外,我还创建了自定义datasoruce,如下所示。

  • 我正在开发Spring Boot应用程序,在启动服务器时遇到了这个错误。我不确定是否错误地定义了任何注释或缺少任何依赖项。任何帮助都将不胜感激。 主要类: UserService类: UserDAO类: @repository公共类UserDAO实现IUserDAO{ Build.gradle: 错误消息: 我看到了所有相关的答案,并尝试实现这些建议,如添加依赖项、在主类中添加符号等。但它显示了相

  • 我有一个使用JPA、Web和PostgreSQL的简单Spring Boot项目。我使用的是最新的Spring Boot版本2.1.3。

  • 我的应用程序无法启动。它由Spring Boot+JPA+SQLite组成。但是Spring Boot和MySQL都运行得很好。我不明白为什么会这样。 错误是 找不到名为“Entity ManagerFactory”的bean O.S.B.D.LoggingFailureAnalysisReporter: **********************************************