Java JPA实体未映射异常
我使用JPA和java作为技术,编写非常简单的web应用程序。 有一个类叫做Employee,如下代码所示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
@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();