Тело:
Я столкнулся с постоянной проблемой с ошибка javax.persistence.PersistenceException в моем приложении Java. В сообщении об ошибке указано: «Нет поставщика постоянства для EntityManager с именем Student_pu_test», и оно указывает на строку, в которой вызывается Persistence.createEntityManagerFactory(). Несмотря на проверку моей конфигурации persistence.xml, зависимостей и настройки EntityManagerFactory, проблема остается.
У меня есть два класса, вовлеченных в эту проблему: StudentRepository и StudentRepositoryTest. Вот фрагменты соответствующего кода:
Класс StudentRepository:
Код: Выделить всё
package fr.charly.jPATutorial;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class StudentRepository {
private EntityManager entityManager;
private EntityManagerFactory emf;
public StudentRepository() {
this.emf = Persistence.createEntityManagerFactory("student_pu_test");
this.entityManager = this.emf.createEntityManager();
}
public StudentRepository(String pu) {
this.emf = Persistence.createEntityManagerFactory(pu);
this.entityManager = this.emf.createEntityManager();
}
public Student add(Student student) {
entityManager.getTransaction().begin();
entityManager.persist(student);
entityManager.getTransaction().commit();
return student;
}
public Student find(Long id) {
return entityManager.find(Student.class, id);
}
public Student update(Student student) {
Student studentToUpdate = find(student.getId());
entityManager.getTransaction().begin();
studentToUpdate.setFirstName(student.getFirstName());
studentToUpdate.setLastName(student.getLastName());
entityManager.getTransaction().commit();
return studentToUpdate;
}
public void delete(Student student) {
entityManager.getTransaction().begin();
entityManager.remove(student);
entityManager.getTransaction().commit();
}
public void close() {
this.entityManager.close();
this.emf.close();
}
}
Код: Выделить всё
package fr.charly.jPATutorial;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class StudentRepositoryTest {
private static StudentRepository repository;
@BeforeAll
public static void beforeClass() throws Exception {
repository = new StudentRepository("student_pu_test");
}
@AfterAll
public static void afterClass() throws Exception {
if (repository != null) {
repository.close();
}
}
@BeforeEach
public void setUp() throws Exception {
}
@AfterEach
public void tearDown() throws Exception {
}
@Test
public void add() {
Student student = new Student();
student.setLastName("Red");
student.setFirstName("Alan");
repository.add(student);
assertNotNull(student.getId());
assertTrue(student.getId() != null);
}
@Test
public void find() {
Student student = new Student();
student.setLastName("Red");
student.setFirstName("Alan");
repository.add(student);
student = repository.find(student.getId());
assertNotNull(student);
assertNotNull(student.getId());
assertEquals("Red", student.getLastName());
}
@Test
public void update() {
Student student = new Student();
student.setLastName("Red");
student.setFirstName("Alan");
student = repository.add(student);
student.setLastName("Green");
student = repository.update(student);
assertNotNull(student);
assertEquals("Green", student.getLastName());
assertEquals("Alan", student.getFirstName());
}
@Test
public void delete() {
Student student = new Student();
student.setLastName("Red");
student.setFirstName("Alan");
student = repository.add(student);
repository.delete(student);
student = repository.find(student.getId());
assertNull(student);
}
}
Код: Выделить всё
org.hibernate.jpa.HibernatePersistenceProvider
fr.charly.jPATutorial.Student
Я буду очень признателен за любые идеи, предложения или решения, которые помогут мне устранить неполадки и решить эту постоянную проблему. Заранее благодарим вас за вашу помощь и опыт.
Подробнее здесь: https://stackoverflow.com/questions/785 ... er-named-s