J'essaie de configurer JPA pour mon projet Maven en utilisant Hibernate en tant que fournisseur.
Structure du projet
├── META-INF
│ └── persistence.xml
├── src
| ├── main
| | └── Java
| | ├── model
| | | └── Instance.Java
| | └── App.Java
| └── test
| └── Java
| └── model
| └── AppTest.Java
└── pom.xml
Contenu de 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>
Contenu de 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;
}
}
Contenu de 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();
}
}
Contenu de 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>
J'ai eu l'exception suivante:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named testjpa
mais je ne sais pas pourquoi. Quel est le problème dans mon code? Je n'ai pas pu trouver la solution.
Persistence.xml n'est pas dans le répertoire resources et donc pas dans classpath. Déplacez le répertoire META-INF vers src/main/resources.
Ajoutez hibernate-entitymanager.jar au chemin de classe pour résoudre ce problème.
J'ai eu ce problème avec hibernate 5. Basculer vers 4.3.11.Final résoudre ce problème. La org.hibernate.ejb.HibernatePersistence n'était pas dans classpath.