java - 带有 EJB : No persistence provider 的 JPA

标签 java 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
│       │   └── 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 documentationpersistence.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/

相关文章:

Java - 在 Java 程序中运行带有 args 的 java 程序

java - 如何在java中使用正则表达式分割字符串

java - 为什么JPA实体类不能有自定义实例变量?

java - org.hibernate.ObjectDeletedException : deleted object would be re-saved by cascade : Error while trying to delete a Patient object

mysql - 在 JPA 中创建表时出现问题

java - Mockito Spring Boot 给出空指针异常

java - 使用java套接字发送时图像不完整

java - 检查字符串是否匹配特定的正则表达式

java - hibernate 不保存外键

java - 当我有 PIVOT 时,使用 JPA 如何在 native 查询中设置参数