【问题标题】:javax.persistence.PersistenceException - JPA+Hibernatejavax.persistence.PersistenceException - JPA+休眠
【发布时间】:2013-11-24 15:54:05
【问题描述】:

我是 JPA 的新手,当我尝试运行以下代码时,它显示错误为“cvc-elt.1:找不到元素'persistence'的声明。

我无法修复这个错误,你能帮我解决这个问题吗?

干杯

拉杰什

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();

    }

}

错误:

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)

【问题讨论】:

    标签: hibernate jpa jpa-2.0 nhibernate-mapping jta


    【解决方案1】:

    问题是您的 与您的休眠库要求不匹配。复制并粘贴来自可靠示例的带有名称空间 (xmlns) 的整个持久性标记。然后检查您的库版本,如下所示。

    来自 hibernate.org:http://hibernate.org/orm/downloads/

    支持的 JPA 版本

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

    请注意,较新的 ORM 版本向后兼容较旧的 JPA 版本(例如:ORM 4.3 和 JPA 1.0)。但是,较新的 ORM 版本可能 与旧的 JPA 容器不兼容。

    JPA 版本与持久化版本相同。 ORM 是休眠的版本。所以你的持久性文件有&lt;persistence version="2.1" ... &gt;。因此,到目前为止,您只需要以下 hibernate 库和版本(或更高版本):

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

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

    我在这个上花了一大堆时间。我希望我花费的时间可以节省您的时间!

    【讨论】:

      【解决方案2】:

      我怀疑您的环境仅支持持久性 2.0。尝试改变:

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

      【讨论】:

      • 感谢 Glenn Lane,在更改版本后,我遇到了另一种错误,称为“java.lang.IncompatibleClassChangeError:Implementing class”
      【解决方案3】:

      您的 xml 中缺少 &lt;persistence&gt; 元素...检查您发布的 xsd 并使您的 persistence.xml 符合架构。一个简单的例子见this link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-18
        • 2016-01-19
        • 2013-06-19
        • 2011-06-25
        • 2021-06-25
        • 2012-04-19
        • 2013-01-29
        • 2012-07-30
        相关资源
        最近更新 更多