我正在尝试使用 JPA 运行我的第一个应用程序,但问题似乎是找不到 persistence.xml。
run:
[java] Driver loaded successfull.
[java] Got connection.
[java] Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named books
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
[java] at com.primaryAnalysis.Main.main(Unknown Source)
[java] Java Result: 1
项目结构相同:
src ├── java │ └── com │ ├── ejb │ │ └── Persistence │ │ └── ejb3-persistence.jar │ ├── mysql │ │ └── jdbc │ │ └── Driver │ │ └── mysql-connector-java-5.1.24-bin.jar │ └── primaryAnalysis │ ├── ... └── resources └── META-INF └── persistence.xml
Here is my persistence.xml file:
<?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="books" transaction-type="JTA">
<provider>com.ejb.Persistence</provider>
<class>com.primaryAnalysis.Book</class>
<class>com.primaryAnalysis.Autor</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/books" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="MyNewPass" />
<property name="toplink.ddl-generation" value="create-tables" />
</properties>
</persistence-unit>
</persistence>
我的 build.xml 中的taskdef 资源 中有资源 目录的路径。
有什么想法吗?
谢谢。
最佳答案
根据 this documentation ,persistence.xml
文件应该可以在项目 jar 的 META-INF
文件夹中找到。当您在 IDE 项目结构中进行开发时,它在哪里并不重要,但您的构建工具应该将它放在 jar 中的 META-INF
下。
用 Ant (build.xml)
<copy todir="some_folder/temp">
<fileset dir="src/resources" /> // copies everything under src/resources to some_folder/temp
</copy>
<jar jarfile="some_folder/bin/your_app.jar">
<fileset dir="some_folder/temp" /> // put the folder from before in your jar
</jar>
关于java - 带有 EJB : No persistence provider 的 JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404333/