找不到元素 'persistence' JPA 和休眠提供程序的声明

Cannot find the declaration of element 'persistence' JPA and hibernate provider

我是 jpa 的新手,我正在尝试编写和执行此处创建的示例:Sample JPA

这是我 table 创建的:

这是我的 persistance.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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_0.xsd">
<persistence-unit name="EmployeeService" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>ir.ac.sbu.testsimplesql1.Employee</class>
<properties>
  <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/library?zeroDateTimeBehavior=convertToNull"/>
  <property name="javax.persistence.jdbc.user" value="root"/>
  <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
  <property name="javax.persistence.jdbc.password" value="pass"/>
  <property name="hibernate.archive.autodetection" value="class"/>
  <property name="hibernate.show_sql" value="true"/>
  <property name="hibernate.format_sql" value="true"/>
  <property name="hbm2ddl.auto" value="update"/>
</properties>

我从数据库自动生成模型 class:

package ir.ac.sbu.testsimplesql1;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name = "Employee")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Employee.findAll", query = "SELECT e FROM Employee e"),
@NamedQuery(name = "Employee.findById", query = "SELECT e FROM Employee e WHERE e.id = :id"),
@NamedQuery(name = "Employee.findByFistName", query = "SELECT e FROM Employee e WHERE e.fistName = :fistName"),
@NamedQuery(name = "Employee.findByLastName", query = "SELECT e FROM Employee e WHERE e.lastName = :lastName"),
@NamedQuery(name = "Employee.findByDept", query = "SELECT e FROM    Employee e WHERE e.dept = :dept")})
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Column(name = "fistName")
private String fistName;
@Column(name = "lastName")
private String lastName;
@Column(name = "dept")
private String dept;

public Employee() {
}

public Employee(Integer id) {
    this.id = id;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getFistName() {
    return fistName;
}

public void setFistName(String fistName) {
    this.fistName = fistName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getDept() {
    return dept;
}

public void setDept(String dept) {
    this.dept = dept;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (id != null ? id.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Employee)) {
        return false;
    }
    Employee other = (Employee) object;
    if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "ir.ac.sbu.testsimplesql1.Employee[ id=" + id + " ]";
}
}

这是我的poem.xml:(依赖标签)

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

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.2.8.Final</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.27</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.5.2</version>
    </dependency>
</dependencies>

最后一件事是我的主要功能:

public class EmployeeTest {



private static EntityManager em;

public static void main(String[] args) {

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("EmployeeService");
    em = emf.createEntityManager();

    createEmployee(1, "Saint", "Peter", "Engineering");
    createEmployee(2, "Jack", " Dorsey", "Imaginea");
    createEmployee(3, "Sam", "Fox", "Imaginea");

}

private static void createEmployee(int id, String firstName, String lastName, String dept) {
    em.getTransaction().begin();
    Employee emp = new Employee();
    emp.setId(id);
    emp.setFistName(firstName);
    emp.setLastName(lastName);
    emp.setDept(dept);

    em.persist(emp);
    em.getTransaction().commit();
}
}

但是当我 运行 这段代码时,我遇到了这个错误:

我已经搜索了这个错误芽无法理解我该怎么办。我也访问过这个 link: Can not find the declaration of element 'persistence'

javax.persistence.PersistenceException - JPA+Hibernate 还有很多类似的问题....

谁能帮我解决这个错误?

提前感谢您的关注。

您可以在此处对照 XSD 检查您的 XML:http://www.freeformatter.com/xml-validator-xsd.html 很有用。

将 xml 的开头替换为:

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

我不知道为什么,但你的没有经过验证。

此外,您错过了 xml 的结尾,但我猜这只是一个 copy/paste 错误。