我是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.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)
任何帮助都将不胜感激。
答案 0 :(得分:5)
要使JPA正常工作,您需要META-INF/persistence.xml
。我将假设这是一个网络应用程序,因此该文件夹必须位于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>
答案 1 :(得分:5)
嗯,错误是自我解释,你需要提供一个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提供程序):
<?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>
有关上述文件的一些评论:
RESOURCE_LOCAL
(这实际上是Java SE环境中的默认设置,但指定它使其更清晰)。答案 2 :(得分:0)
EntityManagerFactory emf = Persistence.createEntityManagerFactory("<JDBC connection>");
检查正确的JDBC连接。