需要“jakarta.persistence.EntityManager”类型的 bean,但无法找到

问题描述 投票:0回答:2

我正在尝试编译我的 Spring Boot 项目,但由于错误需要找不到类型为“jakarta.persistence.EntityManager”的 bean,我在运行应用程序时遇到问题。错误位于 TypeHunterDAOJpaImplementation.java.

  • TypeHunter.java
import jakarta.persistence.*;

@Entity
@Table(name="type_hunters")
public class TypeHunter {

    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="description")
    private String description;

    public TypeHunter() {  // No-arg constructor for JPA

    }

    public TypeHunter(int id, String description) {
        this.id = id;
        this.description = description;
    }

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getDescription() { return description; }
    public void setDescription(String description) { this.description = description; }
}
  • TypeHunterDAO.java
import java.util.List;

public interface TypeHunterDAO {

    List<TypeHunter> findAll();

}
  • TypeHunterDAOJpaImplementation.java
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public class TypeHunterDAOJpaImplementation implements TypeHunterDAO {

    @PersistenceContext
    private EntityManager entityManager;

    @Autowired
    public TypeHunterDAOJpaImplementation(EntityManager theEntityManager){
        entityManager = theEntityManager;
    }

    @Override
    public List<TypeHunter> findAll() {
        if (entityManager == null) throw new IllegalStateException("EntityManager does not work correctly.");
        TypedQuery<TypeHunter> query = entityManager.createQuery("from TypeHunter", TypeHunter.class);
        return query.getResultList();
    }

}
  • TypeHunterREST.java
import com.user.springboot3.project.DAO.TypeHunterDAO;
import com.user.springboot3.project.Entity.TypeHunterHunter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RequestMapping("/api")
@RestController
public class TypeHunterRest {

    private TypeHunterDAO type_hunter;

    public TypeHhnterRest(TypeHunterDAO typeHunterDAO) {
        this.type_hunter = typeHunterDAO;
    }

    @GetMapping("/type-hunter")
    public List<TypeHunter> findAll() {
        return type_hunter.findAll();
    }
}

建议的操作是 考虑在配置中定义“jakarta.persistence.EntityManager”类型的 bean。

我的

pom.xml
有:

        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.6.6.Final</version>
        </dependency>

我想它一定会起作用。

java spring spring-boot jpa
2个回答
1
投票

EntityManagerFactory Bean 配置:如果 Spring Boot 在类路径上检测到 Spring Data JPA 或 Hibernate 并且您正在使用

EntityManagerFactory
,则通常会自动配置
spring-boot-starter-data-jpa
。确保您的
pom.xml
:

中有此入门依赖项
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

数据源配置:确保您的

application.properties
application.yml
文件正确配置了数据源详细信息,例如 URL、用户名和密码以及 JPA 属性。

示例

application.properties
配置:

spring.datasource.url=jdbc:mysql://localhost:3306/yourdatabase
spring.datasource.username=yourusername
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

0
投票

尝试仅使用一种方法来注入EntityManager。

用途:

@PersistenceContext
private EntityManager entityManager;

或使用:

@Autowired
public TypeHunterDAOJpaImplementation(EntityManager theEntityManager){
    entityManager = theEntityManager;
}
© www.soinside.com 2019 - 2024. All rights reserved.