带有EJB的JPA:没有持久性提供程序



我正试图使用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 resourceresourcedirectory的路径。

有什么想法吗?

谢谢。

根据本文档,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>

最新更新