我正试图使用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││└──坚持不懈││└──ejb3-持久性.jar│├──mysql││└──jdbc││└──驾驶员││└──mysql-connector-java-5.1.24-bin.jar│└──primary分析│├── ...└──资源└──META-INF└──persistence.xml
这是我的persistence.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="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 resource中resourcedirectory的路径。
有什么想法吗?
谢谢。
根据本文档,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>
<provider>com.ejb.Persistence</provider>
瓦特?
谷歌搜索测试(谷歌:"com.ejb.Persistence"(说这是一种非常特别(罕见(的东西:
16 results
结果是:
1. <provider>com.ejb.Persistence</provider> - this question
2. <local>com.ejb.persistence.UserLocal</local> - some samples from india's guest at oracle forum
3. no exact match
4 - 9. search spam sites webwiki.com codeweblog.com ineedfile2.com webstatsdomain.com
10 - 16. "java-enterprise-app.developerfaqs.com.ejb.finder" at ejb.developerfaqs.com/
因此,我几乎可以肯定,在文件夹"src/java.com/ejb/Persistence/"(注意,这是com.ejb.Persistence类的不正确文件夹,应该缝合为"com/ejb/Persistence.class"(或jar文件ejb3-persistence.jar
中没有名为"com.ejb.Persistence"的有效提供程序。我有一个来自mvnrepository.com的文件副本,根据这个jar的结构,它只有javax.persistence.*类,没有任何com.ejb.*类。
我认为你可以切换到eclipselink jpa提供商(从下载"安装程序Zip(37MB("http://www.eclipse.org/eclipselink/downloads/并从"eclipselink/jlib/eclipselink.jar"中提取组合jar(:
<persistence-unit name="books" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</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.password" value="MyNewPass"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>