2014-09-03 13 views
6

Sto praticando con API JPA. Ho ottenuto un errorejava.lang.ClassNotFoundException: javax.persistence.Persistence non può essere trovato con JPA

java.lang.ClassNotFoundException: javax.persistence.Persistence cannot be found 

mio codice qui sotto:

EntityManagerFactory emf; 
emf = Persistence.createEntityManagerFactory("mail"); 
EntityManager em = emf.createEntityManager(); 
Query query = em.createQuery("SELECT v FROM Version v"); 
List<Version> versions = query.getResultList(); 

L'errore alla riga emf = Persistence.createEntityManagerFactory("mail");

Qualsiasi soluzione?

+0

controllare se tutti i barattoli richiesti sono in classpath. – Adi

+0

'Persistenza' e' EntityManagerFactory' normalmente sono forniti dallo stesso jar (ad es. Javaee-api-7.0.jar), puoi dirci quale stai usando? – Thomas

+0

Quale provider JPA stai utilizzando? Stai eseguendo standalone o in un contenitore (JEE)? Se indipendente, confrontare il percorso di classe (runtime) con il percorso di generazione per trovare i jj mancanti nel classpath. – JimmyB

risposta

12

Si sta tentando di impostare un progetto JPA standalone. Per fare ciò è necessario un barattolo di provider JPA. I due più popolari provider sono Eclipselink e Hibernate. Se stai usando Maven puoi aggiungere dipendenze alle loro implementazioni.

  • Per EclipseLink

    <dependency> 
        <groupId>org.eclipse.persistence</groupId> 
        <artifactId>eclipselink</artifactId> 
        <version>2.5.1</version> 
    </dependency> 
    
  • per Hibernate

    <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> 
    

Se non si utilizza Maven è possibile scaricare le loro implementazioni dai loro siti e metterlo nel classpath.

Alcune Quickstarts JPA raccomandano di aggiungere solo l'API JPA (dichiarazioni di interfaccia solo) dipendenze con Maven.

<dependency> 
     <groupId>org.eclipse.persistence</groupId> 
     <artifactId>javax.persistence</artifactId> 
     <version>2.1.0</version> 
    </dependency> 

o

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

Questo approccio avrà successo solo in ambiente server come server fornirà adeguata implementazione in fase di esecuzione.

+0

Grazie. Il problema è che ho perso 'javax.persistence.jar' nel mio classpath. – gamo

Problemi correlati