# [Hibernate] No Persistence provider for EntityManager



## Suven (3. Aug 2011)

Hallo zusammen,

vorweg: Leider bin ich mir nicht sicher, ob das Problem bei Hibernate oder Netbeans liegt. Entschuldigt gegebenenfalls die falsche Forenwahl.

Ich habe begonnen unter Netbeans 7.0 eine Swing-Applikation mit HSQLB und Hibernate zu basteln. Dies  ist meine erste JPA-Anwendung.

Beim Versuch einen EntityManager anzulegen, bekomme ich folgende Exception:

```
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persistence provider for EntityManager named ShopDTO
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at de.wbbcoder.jsuba.service.ShopService.<init>(ShopService.java:17)
```

Meine Service-Klasse sieht so aus:


```
package de.wbbcoder.jsuba.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import de.wbbcoder.jsuba.model.shop.ShopDTO;

public class ShopService {

    private EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("ShopDTO");

    public ShopService() {
    }
    
    public void createShop(ShopDTO shopDTO) {
        EntityManager em = emf.createEntityManager();
        em.persist(shopDTO);
        em.close();
    }
    
}
```

Mein DTO/DAO/Whatever pflege ich mit Annotations:


```
package de.wbbcoder.jsuba.model.shop;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table (name = "Shops")
public class ShopDTO implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;

    public ShopDTO() {
    }...
```

Ich habe in einem Ordner META-INF auch entsprechende persistence.xml und hibernate.cfg.xml platziert:

[XML]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
    <property name="hibernate.connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property>
    <property name="hibernate.connection.url">jdbc:hsqldb:file:testdb</property>
    <property name="hibernate.show_sql">true</property>
    <mapping class="jsuba.model.shop.ShopDTO"/>
  </session-factory>
</hibernate-configuration>
[/XML]

[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="jSuBA_InterfacePU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>de.wbbcoder.jsuba.model.Brand.BrandDTO</class>
    <class>de.wbbcoder.jsuba.model.shop.ShopDTO</class>
    <properties>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.connection.username" value=""/>
      <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbc.JDBCDriver"/>
      <property name="hibernate.connection.password" value=""/>
      <property name="hibernate.connection.url" value="jdbc:hsqldb:file:testdb"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>
[/XML]

Ich habe außerdem darauf geachtet, dass im IDE unter Project Properties -> Libraries die entsprechenden Pakete eingebunden sind.

Netbeans findet zumindest beim Tippen im Editor auch alle Hibernate-Klassen inklusive dem EntityManager.

Ich habe das Projekt bereits mit "Clean and Build" gestartet, habe das Projekt komplett neu angelegt und sicher gestellt, dass keine Umlaute in Dateipfad vorhanden sind.

Was kann ich sonst noch falsch gemacht haben?

Das gesamte Projekt habe ich der Einfachheit halber auch mal hier commited: https://github.com/Kohtason/jSuBA


----------



## bluer (4. Aug 2011)

Hi,

die XML für den Datenbank-Connector muss denke ich : persistence.xml heißen. Deine Fehlermelder sagt ja, dass er keinen Provider für deinen EntityManager finden konnte. Schaue mal hier: Create Entity Manager Factory : Entity ManagerJPAJava 
Da ist das anlegen eines simplen Beispiels echt gut erläutert.


----------



## Suven (4. Aug 2011)

Danke für den Tipp mit dem Guide, da werde ich auf jeden Fall mal reinschauen.

Und natürlich heißt die Datei bei mir persistence.xml .. Das war mein Finger wohl gestern nicht allzu treffsicher  (https://github.com/Kohtason/jSuBA/tree/master/src/META-INF)


----------



## AFlieger (4. Aug 2011)

ersetze mal 
private EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("ShopDTO");

durch 

private EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("*jSuBA_InterfacePU*");


----------



## Suven (4. Aug 2011)

Vielen Dank, das hat mein Problem gelöst.

Gibt es dazu auch eine Erklärung? In sämtlichen anderen Beispielen wird beim EntityManager immer etwas mitgegeben, das den entsprechenden Service oder das Model beschreibt???:L


----------



## AFlieger (4. Aug 2011)

Nun, die Erklärung ist denkbar einfach, der String der mitgegeben wird bezeichnet immer den Namen der PersistenceUnit, welche benutzt wird.

Du kannst ja in der persistence.xml auch mehrere definieren.


----------

