Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA实体未映射异常_Java_Jpa - Fatal编程技术网

Java JPA实体未映射异常

Java JPA实体未映射异常,java,jpa,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; } publ

我使用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>

org.hibernate.ejb.HibernatePersistence
com.solution.domain.Employee
此xml文件中存在员工类条目

启动应用程序时没有问题。一切正常。 但当执行查询时,它会抛出异常。
“未映射员工[从员工e中选择e]”

EntityManager em=getEntityManager();
em.getTransaction().begin();
Query Query=em.createQuery(“从员工e中选择e”);
List employees=query.getResultList();
如果(员工!=null){
返回员工。获取(0);
}
em.getTransaction().commit();

我无法理解哪里缺少映射。正如我已经提到的,这是一个网络项目。因此,为了进一步澄清,我附上一个屏幕截图我的项目了


提前谢谢

旁注:用JPA对数据库建模是个坏主意,例如,在数据模型中实现整数代理键。JPA应该有助于持久化对象模型,该模型将使用自然的“键”来区分对象。JPA实体应该只公开对象模型的属性。这样做的好处是大大简化了关系的表达式,因为您关联的是对象,而不是ID字段。不要将JPA用于数据库转换,将其用于对象持久性。

旁注:使用JPA对数据库建模是个坏主意,例如,通过在数据模型中实现整数代理键。JPA应该有助于持久化对象模型,该模型将使用自然的“键”来区分对象。JPA实体应该只公开对象模型的属性。这样做的好处是大大简化了关系的表达式,因为您关联的是对象,而不是ID字段。不要将JPA用于数据库转换,将其用于对象持久性。

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

我有问题了。这是一个愚蠢的错误。我使用的是JPA,但在Employee类中,我使用了hibernate实现中的实体注释,而不是JPA包

但它是“列出的”,那么为什么要为排除未列出的类而设为false?!这是否有助于确定getEntityManager()方法返回的是您定义的“JPAService”持久化单元,而不是可能没有映射该类的其他持久化单元?@Tine,排除不工作。给出相同的异常。@Chris,是的,我确信getEntityManager()方法返回的是JPAService持久化单元。但是它是“列出的”,那么为什么要为“排除未列出的类”设置false?!这是否有助于确定getEntityManager()方法返回的是您定义的“JPAService”持久化单元,而不是可能没有映射该类的其他持久化单元?@Tine,排除不工作。给出相同的异常。@Chris,是的,我确信getEntityManager()方法正在返回JPAService持久化单元。这应该是对问题的评论,而不是回答。这应该是对问题的评论,而不是回答
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();