找不到元素'persistence'的声明JPA和hibernate提供者

时间:2016-05-13 09:36:42

标签: java hibernate jpa persistence pom.xml

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

这是我创建的表:enter image description here

这是我的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>

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

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

但是当我运行此代码时,我遇到了这个错误: enter image description here

我搜索过这个错误,芽无法理解我该怎么做。我也访问了这个链接: Can not find the declaration of element 'persistence'

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

有人可以帮我解决这个错误吗?

提前感谢您的关注。

1 个答案:

答案 0 :(得分:2)

您可以在此处针对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的结尾,但我猜它只是一个复制/粘贴错误。