Helidon MP EntityManager всегда возвращает NULLJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Helidon MP EntityManager всегда возвращает NULL

Сообщение Anonymous »

Я сталкиваюсь с исключением NullPointerException при попытке использовать EntityManager в своем проекте Helidon MicroProfile. Исключение возникает из-за того, что EntityManager имеет значение null, когда я пытаюсь создать запрос. Сообщение об ошибке:

Код: Выделить всё

java.lang.NullPointerException: Cannot invoke "jakarta.persistence.EntityManager.createQuery(String, java.lang.Class)" because "this.entityManager" is null
Это происходит в методе getDataBaseData() моего класса DataBaseService. Я использую аннотацию @PersistenceContext для внедрения EntityManager, но кажется, что внедрение не работает должным образом.
Я использую Helidon MP и настроил файл persistence.xml для Derby в качестве базы данных.
вот ressources/META-INF/beans.xml: ressources/META-INF/persistence.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








ressources/application.yaml:

Код: Выделить всё

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;
}
}
DataBaseService.java:

Код: Выделить всё

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);
}
}
Ресурс базы данных (POST и GET для внешнего интерфейса):

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»