JPA-MSAccess DB 的 EntityManager 没有持久性提供程序

Posted

技术标签:

【中文标题】JPA-MSAccess DB 的 EntityManager 没有持久性提供程序【英文标题】:JPA- No Persistence provider for EntityManager for MSAccess DB 【发布时间】:2012-11-15 11:25:12 【问题描述】:

我正在尝试使用 JPA 通过 JDBC:ODBC 连接连接到 MS 访问数据库。这是我的 Persistance.xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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_1_0.xsd">
    <persistence-unit name="DSRJPA">
    <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
    <class>com.entity.AccessEntity</class>
    <properties>
    <property name="toplink.jdbc.url" value="jdbc:odbc:MSAccessDB"/>
    <property name="toplink.jdbc.user" value="admin"/>
    <property name="toplink.jdbc.driver" value="sun.jdbc.odbc.JdbcOdbcDriver"/>
    <property name="toplink.jdbc.password" value="admin"/>
    <property name="toplink.jdbc.read-connections.min" value="1"/>   
    <property name="toplink.jdbc.write-connections.min" value="1"/> 
    </properties>
    </persistence-unit>
</persistence>

但是当我运行代码时,我得到了这个错误:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named DSRJPA:  The following providers:
oracle.toplink.essentials.PersistenceProvider
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider
Returned null to createEntityManagerFactory.

    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:154)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
    at com.test.Access.main(Access.java:19)

请告诉我这个错误。 提前致谢。

【问题讨论】:

你确定你的persistence.xml被拾取了吗?它是否命名正确,并放置在 META-INF 文件夹中,该文件夹又位于类路径的根目录中(直接在 jar 文件中或 /WEB-INF/classes/ 如果它是战争文件)? 确实看起来 JPA 找不到持久性单元。你的文件是 Persistance.xml 还是 Persistence.xml (没有错字吗?) 文件名和位置是 /DSRJPA/src/META-INF/persistence.xml。它存在于正确的文件夹结构下,但我在运行它时继续收到错误。注意:我在 IBM Rad 7.5 中使用 JPA 项目类型。 【参考方案1】:

你在课堂上引用过你的持久化单元吗?

EntityManagerFactory emf = Persistence.createEntityManagerFactory("DSRJPA");

【讨论】:

以上是关于JPA-MSAccess DB 的 EntityManager 没有持久性提供程序的主要内容,如果未能解决你的问题,请参考以下文章

实体框架和多线程

注入 EntityManager 与。实体管理器工厂

如何为 EntityManagerFactory 设置 Hibernate 拦截器

在类路径资源中定义名称为“entityManagerFactory”的 bean 创建错误

Postgres - Spring Data JPA - 自动生成数据库和表

org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava / UTIL /属性