21

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?

4
  • check if all required jars are in classpath. Commented Sep 3, 2014 at 8:20
  • Persistence and EntityManagerFactory normally are provided by the same jar (e.g. javaee-api-7.0.jar), can you tell us which one you are using? Commented Sep 3, 2014 at 8:23
  • Which JPA provider are you using? Are you running standalone or in a (JEE) container? If standalone, compare the (runtime) classpath to your build path to find missing .jars in the classpath. Commented Sep 3, 2014 at 8:25
  • 2
    OK. I missed javax.persistence.jar in my classpath. Added and problem solved now. Thanks you. Commented Sep 3, 2014 at 8:34

3 Answers 3

31

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks you. The problem is I missed javax.persistence.jar in my classpath.
hibernate-core is needed
3

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

Comments

-1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.