Код: Выделить всё
java.lang.NullPointerException: Cannot invoke "jakarta.persistence.EntityManager.createQuery(String, java.lang.Class)" because "this.entityManager" is nullЯ использую Helidon MP и настроил файл persistence.xml для Derby в качестве базы данных.
вот ressources/META-INF/beans.xml:
Код: Выделить всё
Код: Выделить всё
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence
https://jakarta.ee/xml/ns/persistence/persistence_3_1.xsd"
version="3.1">
explanation database persistence unit
explanationsDS
fr.uge.xplain.Explanation
Код: Выделить всё
javax:
sql:
DataSource:
explanationsDS:
driver: org.apache.derby.jdbc.EmbeddedDataSource
url: jdbc:derby:memory:explanations;create=true
user: admin
password: admin
Код: Выделить всё
package fr.uge.xplain;
import jakarta.persistence.*;
import java.time.LocalDate;
@Entity
public class Explanation {
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // Option pour une meilleure compatibilité
private int id;
@Column(name = "source_code", length = 255)
private String sourceCode;
@Column(name = "explanations", length = 255)
private String explanations;
@Column(name = "creation_date")
private LocalDate creationDate;
// Getters
public int getId() {
return id;
}
public String getSourceCode() {
return sourceCode;
}
public String getExplanations() {
return explanations;
}
public LocalDate getCreationDate() {
return creationDate;
}
// Setters
public void setSourceCode(String sourceCode) {
this.sourceCode = sourceCode;
}
public void setId(int id) {
this.id = id;
}
public void setExplanations(String explanations) {
this.explanations = explanations;
}
public void setCreationDate(LocalDate creationDate) {
this.creationDate = creationDate;
}
}
Код: Выделить всё
package fr.uge.xplain;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.transaction.Transactional;
import java.util.List;
@ApplicationScoped
public class DataBaseService {
@PersistenceContext(unitName = "explanationsDbPU")
private EntityManager entityManager;
public List getDataBaseData() {
return entityManager.createQuery("SELECT e FROM Explanation e ORDER BY e.creationDate DESC", Explanation.class)
.getResultList();
}
@Transactional
public void setDataBaseData(Explanation explanation) {
entityManager.persist(explanation);
}
}
Код: Выделить всё
package fr.uge.xplain;
import jakarta.inject.Inject;
import jakarta.persistence.PersistenceContext;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import java.util.List;
import java.util.Map;
@Path("/database")
public class DataBaseResource {
@Inject
private DataBaseService dataBaseService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getDatabaseData() {
List data = dataBaseService.getDataBaseData();
if (data.isEmpty()) {
return Response.status(Response.Status.NOT_FOUND)
.entity(Map.of("message", "No data found"))
.build();
}
return Response.ok(data).build();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response addData(Explanation explanation) {
dataBaseService.setDataBaseData(explanation);
return Response.status(Response.Status.CREATED).build();
}
}
- Используется ли аннотация @PersistenceContext неправильно?
- Как убедиться, что EntityManager правильно внедрен в Проект Helidon MicroProfile?
- Нужны ли какие-либо дополнительные настройки для работы EntityManager с CDI и Helidon?
Подробнее здесь: https://stackoverflow.com/questions/791 ... eturn-null
Мобильная версия