1

我正在尝试使用 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

项目结构相同:

源代码
├── java
│ └── com
│ ├── ejb
│ │ └── 坚持
│ │ └── ejb3-persistence.jar
│ ├── mysql
│ │ └── jdbc
│ │ └── 司机
│ │ └── mysql-connector-java-5.1.24-bin.jar
│ └── 初级分析
│ ├── ...
└── 资源
    └── 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 资源中资源目录的路径。

有任何想法吗?

谢谢。

4

2 回答 2

2

根据此文档,该persistence.xml文件应在您的项目 jarMETA-INF文件夹中找到。当您在 IDE 项目结构中进行开发时,它在哪里并不重要,但您的构建工具应该将它META-INF放在您的 jar 中。

用蚂蚁(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>
于 2013-05-06T18:33:31.767 回答
1
<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 类的错误文件夹,它应缝为“com/ejb/Persistence.class”)或在 jar 文件ejb3-persistence.jar中。我从mvnrepository.com获得了这个文件的副本,根据这个 jar 的结构,它只有 javax.persistence.* 类,没有任何 com.ejb.* 类。

我认为您可以切换到 eclipselink jpa 提供程序(从http://www.eclipse.org/eclipselink/downloads/下载“Installer Zip (37 MB)”并从“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>
于 2013-05-08T00:19:54.083 回答