我正在尝试在我的 Spring Boot 应用程序中使用 EntityManager,但在调用它的方法时我一直收到 NullPointerException。具体来说,错误消息是:“无法调用 javax.persistence.EntityManager.createQuery(String) 因为 this.entityManager 为空。”
这是我的存储库类
package com.cursojava.curso.respositories;
import com.cursojava.curso.models.WebPage;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
@Repository
public class SearchRepositoryImp implements SearchRepository {
@PersistenceContext
EntityManager entityManager;
@Transactional
@Override
public List<WebPage> search (String textSearch){
String query = "FROM WebPage WHERE description LIKE :textSearch";
return entityManager.createQuery(query)
.setParameter("textSearch",textSearch)
.getResultList();
}
}
模特
import jakarta.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Entity
@Table(name="Webpage")
@ToString @EqualsAndHashCode
@Getter @Setter
public class WebPage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="url")
private String url;
@Column(name="title")
private String title;
@Column(name="description")
private String description;
}
服务
package com.cursojava.curso.services;
import com.cursojava.curso.models.WebPage;
import com.cursojava.curso.respositories.SearchRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SearchService {
@Autowired
private SearchRepository repository;
public List<WebPage> search(String textSearch) {
return repository.search(textSearch);
}
}
我的 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>3.0.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cursojava</groupId>
<artifactId>curso</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>curso</name>
<description>clon google</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
和我的应用属性
# GENERAL
server.port=8080
# DATABASE
spring.datasource.url=jdbc:mysql://localhost/cursojava?useSSL=false
spring.datasource.dbname=cursojava
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.generate-ddl=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.hbm2ddl.auto=updatedup
我正在尝试从我的 mySQL 数据库中获取一些数据