Проблема с базой данных H2 с использованием EcipseLink (программа не меняет базу данных даже без ошибки) - PullRequest
0 голосов
/ 25 сентября 2018

Итак ... Я только начал использовать базы данных, и мой брат посоветовал мне использовать H2 с EclipseLink для запуска.Сделал быстрый поиск в Google и нашел Тутуориал:

  1. https://www.javatips.net/blog/eclipselink-jpa-with-h2-database

  2. https://www.javatips.net/blog/java-persistence-jpa-2-0-tutorial-with-eclipselink

Если я кодирую его так, как описано в Учебном пособии, я не получаю ошибки, когда запускаю его, но проверяю базу данных, моя Таблица еще пуста.Я искал примерно неделю, но не нашел ответа.

Мой код:

Ученик

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "STUDENT")
public class Student implements java.io.Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "STUDENTID")
  private long studentId;

  @Column(name = "STUDENTNAME")
  private String studentName;

  public void setStudentId(long studentId) {
      this.studentId = studentId;
  }

  public long getStudentId() {
      return studentId;
  }

  public void setStudentName(String studentName) {
      this.studentName = studentName;
  }

  public String getStudentName() {
      return studentName;
  }
}

JPAExample

import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;



public class JPAExample {

    private EntityManager entityManager = EntityManagerUtil.getEntityManager();

    public static void main(String[] args) {
        JPAExample example = new JPAExample();
        System.out.println("After Sucessfully insertion ");
        Student student1 = example.saveStudent("Sumith");
        Student student2 = example.saveStudent("Anoop");
        example.listStudent();
        System.out.println("After Sucessfully modification ");
        example.updateStudent(student1.getStudentId(), "Sumith Honai");
        example.updateStudent(student2.getStudentId(), "Anoop Pavanai");
        example.listStudent();
        System.out.println("After Sucessfully deletion ");
        example.deleteStudent(student2.getStudentId());
        example.listStudent();


    }

    public Student saveStudent(String studentName) {
        Student student = new Student();
        try {
            entityManager.getTransaction().begin();
            student.setStudentName(studentName);
            student = entityManager.merge(student);
            entityManager.getTransaction().commit();
        } catch (Exception e) {
            entityManager.getTransaction().rollback();
        }
        return student;
    }

    public void listStudent() {
        try {
            entityManager.getTransaction().begin();
            @SuppressWarnings("unchecked")
            List<Student> Students = entityManager.createQuery("from Student").getResultList();
            for (Iterator<Student> iterator = Students.iterator(); iterator.hasNext();) {
                Student student = (Student) iterator.next();
                System.out.println(student.getStudentName());
            }
            entityManager.getTransaction().commit();
        } catch (Exception e) {
            entityManager.getTransaction().rollback();
        }
    }

    public void updateStudent(Long studentId, String studentName) {
        try {
            entityManager.getTransaction().begin();
            Student student = (Student) entityManager.find(Student.class, studentId);
            student.setStudentName(studentName);
            entityManager.getTransaction().commit();
        } catch (Exception e) {
            entityManager.getTransaction().rollback();
        }
    }

    public void deleteStudent(Long studentId) {
        try {
            entityManager.getTransaction().begin();
            Student student = (Student) entityManager.find(Student.class, studentId);
            entityManager.remove(student);
            entityManager.getTransaction().commit();
        } catch (Exception e) {
            entityManager.getTransaction().rollback();
        }
    }
}

EntityManagerUtil

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;


public class EntityManagerUtil {
    private static final EntityManagerFactory entityManagerFactory;
    static {
        try {
            entityManagerFactory = Persistence.createEntityManagerFactory("test");

        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static EntityManager getEntityManager() {
        return entityManagerFactory.createEntityManager();

    }
}

Persistence.xml

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <class>Student</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
        <property name="javax.persistence.jdbc.url"    value="jdbc:h2:~/test" />
        <property name="javax.persistence.jdbc.user" value="sa" />
        <property name="javax.persistence.jdbc.password" value="" />
        <property name="eclipselink.ddl-generation" value="create-tables"/>
        <property name="eclipselink.ddl-generation.output-mode" value="database" />
    </properties>
</persistence-unit>

Когда я запускаю JPAExample, я получаю этот вывод: Мой вывод

Но ожидаемый результат должен выглядеть следующим образом: Ожидаемый результат

И если я загляну в базу данных H2, ничего не изменилось: Интерфейс базы данных H2 (немецкий язык)

Надеюсь, что кто-то может помочь мне или может связать меня полезным / лучшим учебником по JPA:)

1 Ответ

0 голосов
/ 25 сентября 2018

Вы перехватываете исключения, но не подтверждаете или не регистрируете их - вы должны убедиться, что вы хотя бы записали их в журнал.

В этом случае ваш метод listStudent получает исключение для

 entityManager.createQuery("from Student").getResultList()

поскольку это неверный запрос JPQL.Вы должны использовать что-то вроде:

entityManager.createQuery("select s from Student s").getResultList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...