java - 没有用于 Tomcat 的实体管理器的持久性提供程序

标签 java mysql hibernate tomcat jpa

我正在尝试使用 Java 和 Tomcat 开发一个简单的 rest API 项目。 HTTP 请求工作正常,但我通过实现数据库 MySQL 来存储数据来解决很多问题。这是我的 persistence.xml 文件,位于 Java Resources/META-INF 中:

<persistence xmlns="http://java.sun.com/xml/ns/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">

<persistence-unit name="PERSISTENCE">
    <description> Hibernate JPA Configuration Example</description>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>com.resourceserver.Person</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url"
            value="jdbc:mysql://localhost:3306/RESTResourceServer" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="password" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
</persistence-unit>

这是我的 PersonDAO.java 和 JPAUtil.java 类:

public class PersonDao {

    EntityManager entityManager;

    public PersonDao() {
        entityManager = JPAUtil.getEntityManagerFactory().createEntityManager();
    }

    public void storePerson(Person person) {
        entityManager.persist(person);
        // people.add(person);
    }

    public void deletePerson(Person person) {
        entityManager.remove(person);
        // people.remove(person);
    }

    public Person findPersonId(int id) {
        /*
         * for (Person person : people) { if (person.getId() == id) { return person; } }
         */
        return null;
    }

    @SuppressWarnings("unchecked")
    public List<Person> getAllUsers() {
        Query query = entityManager.createQuery("Select p From People p ");
        return query.getResultList();
        // return people;
    }
}

public class JPAUtil {
    private static final String PERSISTENCE_UNIT_NAME = "PERSISTENCE";
    private static EntityManagerFactory factory;

    public static EntityManagerFactory getEntityManagerFactory() {
        if (factory == null) {
            factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        }
        return factory;
    }

    public static void shutdown() {
        if (factory != null) {
            factory.close();
        }
    }
}

在我的端点中,我简单地使用 PersonDao persona = new PersonDao() 来执行操作;我哪里错了?

最佳答案

您缺少持久性提供程序(不足为奇!)

很可能您已将 JPA API 添加为依赖项,但忘记添加具体的实现,如 Hibernate 或 EclipseLink。这意味着您可以编译整个东西,因为 JPA 的接口(interface)已经存在,但没有实现类。

关于java - 没有用于 Tomcat 的实体管理器的持久性提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46337540/

相关文章:

java - Spring Data JPA - 如何使用组合键插入子实体?

java - 如何将创建的套接字传递给另一个 Java 进程

java - Mac Java - 异常 : java. lang.UnsupportedClassVersionError

java - 线程 "main"org.hibernate.MappingException : Could not determine type for: com. pojo.Address 中出现异常,表:student_mto

php - mySQL 在第二个选择中使用第一个选择的结果

php - 将 Google 搜索中的图像 URL 保存到 MySQL

java - Hibernate 正在自动保存一个全新的实体(完整的调用堆栈)

java - 使用java进行大型SQL数据集查询

java - LockManager - 想法和API

java - 将 float 数组保存到SD卡(java)