gamo
gamo

Reputation: 1577

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

I'm praticing with JPA API. I got an error

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

My code below:

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

The error at line emf = Persistence.createEntityManagerFactory("mail");

Any solution?

Upvotes: 21

Views: 118694

Answers (3)

Aditya Porwal
Aditya Porwal

Reputation: 9

if using maven , add below dependency in Pom.xml

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

then clean install maven

Upvotes: -1

Atul Jain
Atul Jain

Reputation: 1085

Right Click on Project -> Properties -> Search "Deployment Assembly" -> Add Maven Dependencies.

Upvotes: 3

zbig
zbig

Reputation: 3966

You are trying to set up a standalone JPA project. In order to do so you need a JPA provider jars. The two more popular providers are Eclipselink and Hibernate. If you are using maven you can add dependencies to their implementations.

  • For Eclipselink

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.5.1</version>
    </dependency>
    
  • For 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>
    

If you are not using maven you can download their implementations from their sites and put it in your classpath.

Some JPA quickstarts are recommending to add only the JPA API (interface declarations only) dependencies with maven.

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

or

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

This approach will be successful only in server environment as the server will provide appropriate implementation at runtime.

Upvotes: 31

Related Questions