我正在尝试编译我的 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>
我想它一定会起作用。
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
尝试仅使用一种方法来注入EntityManager。
用途:
@PersistenceContext
private EntityManager entityManager;
或使用:
@Autowired
public TypeHunterDAOJpaImplementation(EntityManager theEntityManager){
entityManager = theEntityManager;
}