JPA实体未映射异常

时间:2016-01-09 16:46:43

标签: java jpa

我使用JPA和java作为技术并编写非常简单的Web应用程序。 有一个名为Employee的类,如下面的代码

@Entity
@Table(name="Employee")
public class Employee{

    @Id
    private int id;

    @Column(name="name")
    private String name;


    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

一个名为Employee的表存在于数据库中。 它的persistence.xml文件看起来像下面的代码。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    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">
    <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL">
        <!-- Persistence provider -->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <!-- Entity classes -->
        <class>com.solution.domain.Employee</class>
        <properties>
            <!-- The JDBC driver of your database -->
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <!-- The JDBC URL to the database instance -->
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test" />
            <!-- The database username -->
            <property name="javax.persistence.jdbc.user" value="postgres" />
            <!-- The database password -->
            <property name="javax.persistence.jdbc.password" value="postgres"/>
            <property name="javax.persistence.jdbc.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
         </properties>
    </persistence-unit>
</persistence>

此xml文件中存在Employee类条目。

启动应用程序时没有问题。每件事都很好。 但是当执行查询时它会抛出异常 &#34;员工未映射[从员工e中选择e]&#34;

EntityManager  em = getEntityManager();
        em.getTransaction().begin();
        Query query = em.createQuery("select e from Employee e");
    List<Employee> employees = query.getResultList();
        if(employees != null){
            return employees.get(0);
        }

        em.getTransaction().commit();

enter image description here

我无法理解缺少映射的位置。正如我已经提到过它的一个网络项目。所以为了更清楚,我附上了我的项目的一个屏幕截图。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我遇到了问题。这是一个愚蠢的错误。我正在使用JPA,但在Employee类中,我使用了来自hibernate实现的Entity注释而不是JPA包。

答案 1 :(得分:-1)

附注:使用JPA对数据库建模是个坏主意,例如,通过在数据模型中实现整数代理键。 JPA应该有助于持久化对象模型,该模型将使用自然的&#34;密钥&#34;区分对象。 JPA实体应该只公开对象模型的属性。这有利于大大简化关系的表达,因为您关联的是对象,而不是ID字段。不要使用JPA进行数据库转换,将其用于对象持久性。