Java JPA异常:没有名为MyJPAApplicationPU的EntityManager的持久性提供程序
我是JPA的新手。我尝试使用JPA运行一些示例代码,但出现以下异常:Java JPA异常:没有名为MyJPAApplicationPU的EntityManager的持久性提供程序,java,orm,jpa,persistence,Java,Orm,Jpa,Persistence,我是JPA的新手。我尝试使用JPA运行一些示例代码,但出现以下异常: javax.persistence.PersistenceException: No Persistence provider for EntityManager named MyJPAApplicationPU 我把我的异常信息放在这里 INFO: Could not find any META-INF/persistence.xml file in the classpath javax.persistence.Pers
javax.persistence.PersistenceException: No Persistence provider for EntityManager named MyJPAApplicationPU
我把我的异常信息放在这里
INFO: Could not find any META-INF/persistence.xml file in the classpath
javax.persistence.PersistenceException: No Persistence provider for EntityManager named MyJPAApplicationPU
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
at com.myJpa.TestJPA.setUp(TestJPA.java:30)
at com.myJpa.TestJPA.main(TestJPA.java:72)
任何帮助都将不胜感激。要让JPA发挥作用,您需要
META-INF/persistence.xml
。我将假设这是一个web应用程序,因此该文件夹必须位于web-INF/classes/
中
persistence.xml
文件如下所示:
<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_1_0.xsd"
version="1.0">
<persistence-unit name="MyJPAApplicationPU" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
</persistence>
嗯,错误是自我解释的,您需要提供一个
META-INF/persistence.xml
来使用JPA。此文件用于定义“持久性单元”。根据JPA 1.0规范:
6.2.1 persistence.xml文件
persistence.xml
文件定义了
持久性单位。它可以用来
指定托管持久性类
包含在持久性单元中,
对象/关系映射信息
对于那些课程,以及其他
服务器的配置信息
实体的持久化单元和
工厂经理和实体经理
对于持久性单元。这个
persistence.xml
文件位于
根目录的META-INF
目录
持久性单元的。这
信息可以通过以下方式定义:
包含或引用,如
如下所述
下面是一个Java SE环境的示例persistence.xml
(使用Hibernate作为JPA提供程序):
org.hibernate.ejb.HibernatePersistence
com.mycompany.Foo
com.mycompany.Bar
真的
关于上述文件的一些评论:
- 在Java SE环境中运行时,您不能依赖JTA,事务类型必须是
(这实际上是Java SE环境中的默认类型,但指定它会使其更清晰)RESOURCE\u LOCAL
- 在Java SE环境中运行时,您不能使用JDNI数据源,并且提供程序将直接从JDBC驱动程序获取连接,因此您必须将相关信息(驱动程序类名、连接url、用户、密码)传递给提供程序。对于JPA1.0,用于传递这些元数据的属性是特定于提供者的
- 为了确保Java SE应用程序的可移植性,有必要明确列出持久化单元中包含的托管持久化类
EntityManagerFactory emf=Persistence.createEntityManagerFactory(“”);
检查正确的JDBC连接。您是否将异常中提到的persistence.XML文件放在适当的位置?内容正确吗?大家好,谢谢你们的努力和解决方案。但现在我解决了上述问题,得到了一个新的问题,即实体没有字段[firstname='m']。原因是什么?我如何解决这个问题?
<?xml version="1.0" encoding="UTF-8"?>
<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_1_0.xsd"
version="1.0">
<persistence-unit name="MyJPAApplicationPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.mycompany.Foo</class>
<class>com.mycompany.Bar</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider" />
<property name="hibernate.connection.url" value="jdbc:hsqldb:mem:unit-testing-jpa"/>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
EntityManagerFactory emf = Persistence.createEntityManagerFactory("<JDBC connection>");