Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javax.persistence.PersistenceException - JPA+Hibernate

I am new to JPA, when I tried to run the following code, it showing error as "cvc-elt.1: Cannot find the declaration of element 'persistence'."

I cant able to fix this error, could u pls help me out to solve this issue.

Cheers

Rajesh

Persistance.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <persistence-unit name="jpa" transaction-type="JTA">

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

        <class>com.optirisk.pojo.Department</class>
        <class>com.optirisk.pojo.Employee</class>

        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.connection.username" value="NewsLetter1" />
            <property name="hibernate.connection.password" value="optiindia2012" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/orpss_hibernate_prototype" />
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
        </properties>

    </persistence-unit>
</persistence>

Application.java

public class Application {

    private static final String PERSISTENCE_UNIT_NAME = "jpa";
    private static EntityManagerFactory entityManagerFactory;

    public static void main(String[] args) throws Exception {

        entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();

        Department department = new Department();
        department.setDeptName("IT");
        entityManager.persist(department);

        Employee emp1 = new Employee("Peter", "ROB", "454565");
        Employee emp2 = new Employee("Mathew", "Anderson", "222");

        emp1.setDepartment(department);
        emp2.setDepartment(department);

        entityManager.persist(emp1);
        entityManager.persist(emp2);

        entityManager.getTransaction().commit();
        entityManager.close();

    }

}

Error:

Exception in thread "main" javax.persistence.PersistenceException: Invalid persistence.xml.
Error parsing XML (line-1 : column -1): cvc-elt.1: Cannot find the declaration of element 'persistence'.
    at org.hibernate.ejb.packaging.PersistenceXmlLoader.loadURL(PersistenceXmlLoader.java:147)
    at org.hibernate.ejb.packaging.PersistenceXmlLoader.deploy(PersistenceXmlLoader.java:171)
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:325)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
    at com.jishraa.jpa.Application.main(Application.java:19)
like image 765
Rajesh Avatar asked May 11 '26 03:05

Rajesh


2 Answers

The issue is a mismatch between your <persistence version="2.1"...> and your hibernate library requirements. Copy and paste the whole persistence tag with name spaces (xmlns) from a reliable sample. Then check your library version, below.

From hibernate.org: http://hibernate.org/orm/downloads/

Supported JPA Versions

JPA 1.0: ORM 3.2+
JPA 2.0: ORM 3.5+
JPA 2.1: ORM 4.3+

Note that newer ORM releases are backwards compatible with older JPA versions (ex: ORM 4.3 with JPA 1.0). However, newer ORM releases may not be compatible with older JPA containers.

The JPA version is the same as the persistence version. The ORM is the version of hibernate. So your persistence file has <persistence version="2.1" ... >. So, as of now, you want only the hibernate library and version below (or a later version):

WEB-INF/lib/hibernate-entitymanager-4.3.0.Final.jar

or Maven pom.xml:

<!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.0.Final</version>
</dependency>

I spent a whole bunch of hours on this one. I hope my time spent saves yours!

like image 151
David Lotts Avatar answered May 12 '26 18:05

David Lotts


I suspect your environment only supports persistence 2.0. Try changing:

<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

To:

<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">
like image 28
Glenn Lane Avatar answered May 12 '26 17:05

Glenn Lane