java - JPA + Hibernate = EntityManager 没有持久性提供者

标签 java hibernate maven jpa

我正在尝试为我的 Maven 项目设置 JPA,使用 Hibernate 作为提供者。

项目结构

├── META-INF
│    └── persistence.xml
├── src
|   ├── main
|   |   └── java
|   |       ├── model
|   |       |   └── Instance.java
|   |       └── App.java
|   └── test
|       └── java
|           └── model
|               └── AppTest.java
└── pom.xml

persistence.xml 的内容

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
    <persistence-unit name="testjpa" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>it.vitrociset.model.Instance</class>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/aquasystem"/>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
            <property name="hibernate.connection.username" value="username"/>
            <property name="hibernate.connection.password" value="password"/>
        </properties>
    </persistence-unit>
</persistence>

Instance.java 的内容

package model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Instance {

    @Id
    private String id;
    private String path;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

}

App.java的内容

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class App {
    public static void main( String[] args ) {
        EntityManagerFactory entityManagerFactory =  Persistence.createEntityManagerFactory("testjpa");
        EntityManager em = entityManagerFactory.createEntityManager();
        EntityTransaction userTransaction = em.getTransaction();
        userTransaction.begin();
        Instance instance = new Instance();
        instance.setId("id");
        instance.setPath("path");
        em.persist(instance);
        userTransaction.commit();
        em.close();
        entityManagerFactory.close();
    }
}

pom.xml 的内容

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId></groupId>
    <artifactId></artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.6.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.6.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>

    </dependencies>

</project>

我得到以下异常:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named testjpa

但我不知道为什么。我的代码有什么问题?我找不到解决方案。

最佳答案

Persistence.xml 不在资源目录中,因此不在类路径中。将 META-INF 目录移动到 src/main/resources。

关于java - JPA + Hibernate = EntityManager 没有持久性提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26468910/

相关文章:

java - 在处理无法修改的类时避免使用 instanceof 的最佳设计模式?

java - 计时器到分钟 : seconds : hundreds of seconds

java - 获取HTTP请求头信息: Java

java - Maven 程序集包含快照依赖项

java - Zlib 压缩过大

java - Hibernate Custom 查询可以返回 Map 而不是 List 吗?

java - 如何使用 Hibernate 在运行时选择模式?

java - 如何安全地强制提交 Spring - hibernate 事务

java - Ubuntu:Gradle Maven-发布插件-无法通过sftp连接

tomcat - 使用 Cargo 部署当前项目和另一个 WAR