2013-05-20 13 views
7

Sto provando a configurare un semplice progetto jpa 2.0 seguendo le informazioni fornite dalla documentazione del mio insegnante. Sono stato su questo per ore ora, ma non importa quello che faccio sempre ottengo questa eccezione quando provo a creare una EntityManagerFactory: Ho trovato alcune domande simili riguardo questa eccezione, ma nessuna soluzione che io sia in grado andare a lavoro. Cosa sto facendo di sbagliato qui?javax.persistence.PersistenceException: nessun provider di persistenza per EntityManager denominato

Ho creato questo progetto da Eclipse (senza prompt dei comandi) annuario

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named course 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) 
    at message.SaveMessage.main(SaveMessage.java:8) 

struttura

enter image description here

mia persistence.xml

<persistence 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_2_0.xsd" 
    version="2.0"> 
    <persistence-unit name="course" transaction-type="RESOURCE_LOCAL"> 

     <provider>org.hibernate.ejb.HibernatePersistence</provider> 


     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 

      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/StudentDB" /> 
      <property name="javax.persistence.jdbc.user" value="root" /> 
      <property name="javax.persistence.jdbc.password" value="pasapas2005" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

La mia classe

package message; 

import java.io.Serializable; 

import javax.persistence.*; 

@Entity 
public class Message implements Serializable { 

    private long id; 
    private String text; 

    public Message() { 

    } 

    public Message(long id, String text) { 
     this.setId(id); 
     this.setText(text); 

    } 

    @Id 
    public long getId() { 
     return id; 
    } 

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

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

} 

mio mio tester (principale) classe

package message; 

import javax.persistence.*; 

public class SaveMessage { 

    public static void main(String[] args) { 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("course"); 
     EntityManager em = emf.createEntityManager(); 
     EntityTransaction tx = em.getTransaction(); 
     tx.begin(); 

     Message message = new Message(1, "Hello world"); 
     em.persist(message); 
     tx.commit(); 
     em.close(); 
     System.out.println("message saved"); 

    } 

} 
+0

Verificare che la classe org.hibernate.ejb.Hibernat ePersistence si trovi sul percorso di classe. – JamesB

+0

Grazie per la risposta. La mia domanda può sembrare stupida, ma come posso controllare il mio classpath? –

+0

In eclissi, con il progetto aperto, premi Ctrl + Maiusc + T e inizia a digitare il nome della classe. Se non appare nell'elenco, sai che non è su classpath. – JamesB

risposta

5

penso che la classe org.hibernate.ejb.Hibernat ePersistence manca dal classpath. Aggiungerlo al tuo pom.xml:

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

Sostituire 3.6.10.Final con la versione appropriata di Hibernate.

+0

Non è stato risolto completamente, ma il messaggio di errore è stato cancellato, lasciando posto a un nuovo messaggio di errore che diceva Eccezione nel thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory. Ma ora penso di sapere come farlo funzionare –

+0

Sembra che manchi anche slf4j. – JamesB

+0

Nota: ho avuto questa eccezione dopo aver spostato una classe in un nuovo pacchetto mancante per riflettere la modifica del persistence.xml. –

0

Ho avuto lo stesso problema. Dopo un sacco di ricerche ho scoperto che la soluzione era solo per installare dal marketplace di eclipse gli HiberObjects .

Problemi correlati